hi all, i have the following models: class Developer < ActiveRecord::Base has_and_belongs_to_many :projects accepts_nested_attributes_for :projects end class Project < ActiveRecord::Base has_and_belongs_to_many :developers accepts_nested_attributes_for :developers end the following code: params = { ''form'' => { ''name'' => ''gonzalo'', ''dni'' => ''12876365x'', ''projects_attributes'' => { ''new_01'' => { ''name'' => ''Sioux'', ''cost'' => ''25000'' }, ''new_02'' => { ''name'' => ''Apache'', ''cost'' => ''3400''}}}} Developer.create(params[''form'']) will create a new Developer and two new Projects and the corresponding association between Developer and Projects. then, I add a new Developer using the same mechanism: params = { ''form'' => { ''name'' => ''paul'', ''dni'' => ''17002034z'', ''projects_attributes'' => { ''1'' => { ''name'' => ''ZZZZ'', ''cost'' => ''25000'' }, ''2'' => { ''name'' => ''YYYY'', ''cost'' => ''3400''}}}} Developer.create(params[''form'']) following NestedAttributes documentation... this code should add a new Developer (paul) and link it against the two already created Projects with ids 1 and 2. Besides, this code should modiify projects names from Sioux and Apache to ZZZZ and YYYY respectively. the real result is that a new Developer (paul) is added but linked against two new Projects (ZZZZ and YYYY) am I doing something wrong? should i use another approach to face this problem? is accept_nested_attributes_for feature compatible with habtm associations? and last... what if i just want to create a new Developer (paul) that is associated with the already created Projects with ids 1 and 2? The following code won''t work: params = { ''form'' => { ''name'' => ''paul'', ''dni'' => ''17002034z'', ''projects_attributes'' => { ''1'' => { }, ''2'' => { }}}} Developer.create(params[''form'']) thanks in advance for your help! regards.
Franco Catena
2009-May-20 14:40 UTC
Re: habtm association and accepts_nested_attributes_for
Try using the ID inside (this works for me): params = { ''form'' => { ''name'' => ''paul'', ''dni'' => ''17002034z'', ''projects_attributes'' => { ''1'' => { ''id'' => ''1'', ''name'' => ''ZZZZ'', ''cost'' => ''25000'' }, ''2'' => { ''id'' => ''2'', ''name'' => ''YYYY'', ''cost'' => ''3400''}}}} An element with an ID is considered to be updated instead of created. On May 20, 7:09 am, Gonzalo <gonzalo.llore...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> hi all, > > i have the following models: > > class Developer < ActiveRecord::Base > has_and_belongs_to_many :projects > accepts_nested_attributes_for :projects > end > > class Project < ActiveRecord::Base > has_and_belongs_to_many :developers > accepts_nested_attributes_for :developers > end > > the following code: > > params = { ''form'' => { ''name'' => ''gonzalo'', ''dni'' => ''12876365x'', > ''projects_attributes'' => { > ''new_01'' => { ''name'' => ''Sioux'', ''cost'' => ''25000'' }, > ''new_02'' => { ''name'' => ''Apache'', ''cost'' => > ''3400''}}}} > Developer.create(params[''form'']) > > will create a new Developer and two new Projects and the corresponding > association between Developer and Projects. > > then, I add a new Developer using the same mechanism: > > params = { ''form'' => { ''name'' => ''paul'', ''dni'' => ''17002034z'', > ''projects_attributes'' => { > ''1'' => { ''name'' => ''ZZZZ'', ''cost'' => ''25000'' }, > ''2'' => { ''name'' => ''YYYY'', ''cost'' => ''3400''}}}} > Developer.create(params[''form'']) > > following NestedAttributes documentation... this code should add a new > Developer (paul) and link it against the two already created Projects > with ids 1 and 2. Besides, this code should modiify projects names > from Sioux and Apache to ZZZZ and YYYY respectively. > > the real result is that a new Developer (paul) is added but linked > against two new Projects (ZZZZ and YYYY) > > am I doing something wrong? should i use another approach to face this > problem? is accept_nested_attributes_for feature compatible with habtm > associations? > > and last... what if i just want to create a new Developer (paul) that > is associated with the already created Projects with ids 1 and 2? The > following code won''t work: > > params = { ''form'' => { ''name'' => ''paul'', ''dni'' => ''17002034z'', > ''projects_attributes'' => { > ''1'' => { }, > ''2'' => { }}}} > Developer.create(params[''form'']) > > thanks in advance for your help! > regards.