Forum: Ruby on Rails habtm association and accepts_nested_attributes_for

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Gonzalo (Guest)
on 2009-05-20 14:58
(Received via mailing list)
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 C. (Guest)
on 2009-05-20 18:40
(Received via mailing list)
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.
This topic is locked and can not be replied to.