2010-03-09 1 views
33

중첩 된 form_bulder.object에 액세스하는 방법은 무엇입니까?fields_for form builder 객체는 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 

답변

59

개체를 전달하려면 프로젝트 모델에 accepts_nested_attributes_for가 있어야합니다.

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

당신은 내 목숨을 구했어 .. 고마워! – asiniy

+0

약 90 분 동안 내 머리를 부딪쳤다. 아휴. – DanSingerman

+0

매 6 개월마다 나는 이것을 덧붙이는 것을 잊어 버린다. 그래서 이것에 대한 합리적인 오류가 없다는 것을 성가 시게한다. 그러나 나는 그것이 자동으로 탐지하기 어려울 것이라고 생각한다. –

11

fields_for는 방법 tasks_attributes=이 존재해야합니다. accepts_nested_attributes_for :tasks 당신을 위해이 방법을 만들어,하지만 당신은 단지 스스로를 정의 할 수 있습니다 :이 방법이 존재하지 않는 경우

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

builder.object는 nil이 될 수있을 테니까요.

+0

정말로 감사했다 당신에게 감사해라. – mrageh