2011-09-09 17 views
46

He estado recibiendo todo tipo de información conflictiva con respecto a esta pregunta básica, y la respuesta es bastante crucial para mis problemas actuales. Entonces, de manera muy simple, en Rails 3, ¿está permitido o no el uso de accept_nested_attributes_for con una relación belongs_to?¿accept_nested_attributes_for work with belongs_to?

class User < ActiveRecord::Base 
    belongs_to :organization 
    accepts_nested_attributes_for :organization 
end 

class Organization < ActiveRecord::Base 
    has_many :users 
end 

En una vista:

= 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" 
+1

Los documentos no mencionan http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html 'BELONGS_TO' así que dudo. ¿Por qué no lo intentas y respondes? – epochwolf

Respuesta

21

El epochwolf documento citado estados en la primera línea de "atributos anidados le permiten guardar los atributos en los registros asociados a través de la matriz." (mi énfasis).

Te puede interesar this other SO question which is along the same lines as this one. Describe dos posibles soluciones: 1) mover los accept_nested_attributes al otro lado de la relación (en este caso, organización) o 2) using the build method para compilar la organización en el usuario antes de representar el formulario.

También encontré una esencia que describe a potential solution for using accepts_nested_attributes with a belongs_to relationship si está dispuesto a tratar con un pequeño código adicional. Esto también usa el método build.

+0

He actualizado esa esencia para Rails 4: https://gist.github.com/dmzza/ce9b6e660c576039afca984cda0f0aed – dmzza

19

Los atributos anidados parecen funcionar bien para una asociación belongs_to a partir de Rails 4. Se pudo haber cambiado en una versión anterior de Rails, pero probé en 4.0.4 y definitivamente funciona como se esperaba.

+10

Todavía en Rails 4.1.1, accept_nested_attributes no funciona con * polymorphic * belongs_to. Tuve que moverlo a otro lado (has_one) de la asociación. Esto es solo para compartir la información con otros. –

+0

Estoy de acuerdo con kid_drew. Acabo de hacerlo funcionar en Rails versión 4.2.9. – Tintin81

9

Para belongs_to asociación en Rails 3.2, modelo anidado necesidades de los dos pasos siguientes:

(1) Añadir nueva attr_accessible a su hijo-modelo (modelo de usuario).

accepts_nested_attributes_for :organization 
attr_accessible :organization_attributes 

(2) Añadir @user.build_organization a su hijo-controlador (controlador del usuario) con el fin de crear la columna organization.

def new 
    @user = User.new 
    @user.build_organization 
end 
+0

Estoy haciendo esto, pero me estoy enfrentando a muchos problemas para que funcione. si el padre acepta los parámetros anidados para su hijo no parece ser suficiente para que se cree correctamente, espera que – Csteele5

Cuestiones relacionadas