2010-03-09 8 views
33

¿Alguna forma de acceder a form_bulder.object anidado?fields_for form Builder object is nil

## controller 
@project = Project.new 
@project.tasks.build 

form_for(@project) do |f| 
    f.object.nil? ## returns false 

    fields_for :tasks do |builder| 
    builder.object.nil? ## returns true 
    end 
end 

Respuesta

59

Debe tener accept_nested_attributes_for en el modelo de proyecto para poder pasar el objeto.

class Project < ActiveRecord::Base 
    has_many :tasks 
    accepts_nested_attributes_for :tasks ## this is required 
end 
+1

Has salvado mi vida ... ¡gracias! – asiniy

+0

Me golpeé la cabeza con esto durante unos 90 minutos. Uf. – DanSingerman

+0

Cada 6 meses me olvido de agregar esto, tan molesto que no hay un error sensato para esto. Pero supongo que podría ser difícil de detectar automáticamente. –

11

fields_for requiere que existe el método tasks_attributes=. accepts_nested_attributes_for :tasks crea este método para usted, pero también se puede definir simplemente usted mismo:

def tasks_attributes=(params) 
    # ... manually apply attributes in params to tasks 
end 

Cuando no existe este método, el builder.object termina siendo nula.

+0

Gracias, fue realmente útil – mrageh

Cuestiones relacionadas