2010-03-09 17 views
33

Sie können auf ein geschachteltes Formular_Bulder.Object zugreifen?fields_for Formular-Builder-Objekt ist null

## 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 

Antwort

59

Sie müssen access_nested_attributes_for im Projektmodell haben, damit das Objekt übergeben wird.

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

Sie haben mein Leben gerettet .. danke! – asiniy

+0

Knallte meinen Kopf für etwa 90 Minuten. Wütend. – DanSingerman

+0

Etwa alle 6 Monate vergesse ich das hinzuzufügen, so nervig, dass es dafür keinen sinnvollen Fehler gibt. Aber ich denke, es könnte schwierig sein, automatisch zu erkennen. –

11

fields_for erfordert, dass das Verfahren tasks_attributes= existiert. accepts_nested_attributes_for :tasks schafft diese Methode für Sie, aber Sie können es auch einfach selbst definieren:

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

Wenn diese Methode nicht vorhanden ist, die builder.object endet Null zu sein.

+0

Danke, das war wirklich hilfreich – mrageh