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.