2010-03-09 2 views
33

Любой способ доступа к вложенному form_bulder.object?fields_for form builder object is no

## 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 в модели Project.

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 заканчивает тем, что ноль.

+0

Спасибо, что было очень полезно – mrageh

 Смежные вопросы

  • Нет связанных вопросов^_^