Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does accepts_nested_attributes_for work with belongs_to?

I have been getting all kinds of conflicting information regarding this basic question, and the answer is pretty crucial to my current problems. So, very simply, in Rails 3, is it allowed or not allowed to use accepts_nested_attributes_for with a belongs_to relationship?

class User < ActiveRecord::Base   belongs_to :organization   accepts_nested_attributes_for :organization end  class Organization < ActiveRecord::Base   has_many :users end 

In a view:

= form_for @user do |f|   f.label :name, "Name"   f.input :name    = f.fields_for :organization do |o|     o.label :city, "City"     o.input :city    f.submit "Submit" 
like image 272
Nick M Avatar asked Sep 09 '11 18:09

Nick M


2 Answers

Nested attributes appear to work fine for a belongs_to association as of Rails 4. It might have been changed in an earlier version of Rails, but I tested in 4.0.4 and it definitely works as expected.

like image 52
kid_drew Avatar answered Sep 21 '22 03:09

kid_drew


The doc epochwolf cited states in the first line "Nested attributes allow you to save attributes on associated records through the parent." (my emphasis).

You might be interested in this other SO question which is along the same lines as this one. It describes two possible solutions: 1) moving the accepts_nested_attributes to the other side of the relationship (in this case, Organization), or 2) using the build method to build the Organization in the User before rendering the form.

I also found a gist that describes a potential solution for using accepts_nested_attributes with a belongs_to relationship if you're willing to deal with a little extra code. This uses the build method as well.

like image 21
robmclarty Avatar answered Sep 20 '22 03:09

robmclarty