Cool. Thanks, Pat. Have just implemented that and it works fine .... even with :through.
Nice. -Ants 2009/7/22 Pat <[email protected]> > > 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. > > > -- 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 -~----------~----~----~----~------~----~------~--~---

