Hi Anthony,

It looks like your form_for line in your view is wrong... try this:
  <% form_for(@parent) do |p| %>

...instead of this:
  <% form_for :parent, :url => { :action => :create }  do |p| %>

For some reason the way you called form_for isn't compatible with the
nested attributes feature, and so your form's HTML didn't contain the
proper name for the child field name="parent[children_attributes][0]
[name]". Also, I added a line to your controller to create a single
new child when creating a new parent form; otherwise the child name
field won’t appear:

def new
    @parent = Parent.new
    @parent.children.build

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @parent }
    end
  end

It should work exactly the same way with the has_many, :through
association. Hope this helps!

- pat


On Jul 21, 3:10 pm, Anthony Gardner <[email protected]> wrote:
> Hopefully someone can help. I have the following models
>
> class Parent < ActiveRecord::Base
>   ## schema id int, name string
>   has_many :children
>   accepts_nested_attributes_for :children
> end
>
> class Child < ActiveRecord::Base
>   ## schema id int, name string, parent_id int
>   belongs_to :parent
> end
>
> ... the following view ...
>
> <h1>New parent</h1>
>
> <% form_for :parent, :url => { :action => :create }  do |p| %>
>   <%= p.text_field :name %>
>   <br />
>   <% p.fields_for :children do |c| %>
>     <%= c.text_field :name %>
>   <% end %>
>
>   <%= p.submit 'Create' %>
>
> <% end %>
>
> ... and a scaffold built parents_controller ....
>
>   # GET /parents/new
>   # GET /parents/new.xml
>   def new
>     @parent = Parent.new
>
>     respond_to do |format|
>       format.html # new.html.erb
>       format.xml  { render :xml => @parent }
>     end
>   end
>
>   # POST /parents
>   # POST /parents.xml
>   def create
>     @parent = Parent.new(params[:parent])
>
>     respond_to do |format|
>       if @parent.save
>         flash[:notice] = 'Parent was successfully created.'
>         format.html { redirect_to(@parent) }
>         format.xml  { render :xml => @parent, :status => :created, :location
> => @parent }
>       else
>         format.html { render :action => "new" }
>         format.xml  { render :xml => @parent.errors, :status =>
> :unprocessable_entity }
>       end
>     end
>   end
>
> I'm getting this error ...
> ActiveRecord::AssociationTypeMismatch in ParentsController#create
>
> Child(#-608967938) expected, got Array(#-605071598)
>
> Paramters ...
> {"parent"=>{"name"=>"Ants",
>  "children"=>{"name"=>"Pants"}},
>  "commit"=>"Create",
>  "authenticity_token"=>"x4BoHI06Asp6QumOwFkccthv+no7ychn57tqOl7q9Ig="}
>
> I've tried inserting the same details via the console and it worked but I
> provided a list ot children_attributes ....
>
> params = { :parent => { :name => 'Ants', :children_attributes => [ { :name
> => 'Pants' } ] } }
> p = Parent.create(params[:parent])
>
> and that works fine
>
> So, how do I get *:children_attributes => [ { :name => 'Pants' } ] }* to be
> passed in the params to the controller from the form_for / fields_for in the
> view?
>
> Plus, I really need to get this to work with another model relationship that
> such as ....
>
> class Account < ActiveRecord::Base
>   has_many :memberships
>   has_many :members, :through => :memberships
>
>   accepts_nested_attributes_for :members
> end
>
> class Member < ActiveRecord::Base
>   has_many :memberships
>   has_many :accounts, :through => :memberships
> end
>
> class Membership < ActiveRecord::Base
>   belongs_to :member
>   belongs_to :account
> end
>
> Is there anything special I need to fdo for the :through ??/
>
> Thank you for any light you can throw on this
>
> -Ants
> --
> 100% naturally selected. 0% designed.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to