Вложенные атрибуты не отображают поля атрибутов правильно

Здесь код:

= form_for @form do |f|
 = f.fields_for :questions do |q|
 %p
 = q.object.content
 = q.fields_for :answers do |a|
 %p= a.text_area :content

Какой атрибут name в text_area должен быть form[questions_attributes][0][answer_attribute][content] но он показывает. form[questions_attributes][0][answers][content].

Здесь мои модели.

# answer.rb
 belongs_to :question

# question.rb
 has_one :answer
 accepts_nested_attributes_for :answer

# form.rb
 has_many :questions, :order => 'position ASC'
 accepts_nested_attributes_for :questions

Итак, что я получаю в журнале, это WARNING: Can't mass-assign protected attributes: answers

Любая помощь будет принята с благодарностью. Благодарю!

Обновить

здесь журнал, чтобы вы могли видеть, что передается:

Started POST "/forms/16" for 127.0.0.1 at Fri Mar 09 16:53:58 -0500 2012
 Processing by FormsController#update as HTML
 Parameters: {"commit"=>"Update Form", "utf8"=>"✓", "id"=>"16", "authenticity_token"=>"mcRJP8XgvE0Cl1JsPryER47+Hbx5DwpEveR1m0R7S6k=", "form"=>{"opportunity_id"=>"1", "questions_attributes"=>{"0"=>{"id"=>"101", "answers"=>{"content"=>"asdfasdf"}}, "1"=>{"id"=>"102", "answers"=>{"content"=>"asdfasdf"}}, "2"=>{"id"=>"103", "answers"=>{"content"=>"asdfasdf"}}, "3"=>{"id"=>"104", "answers"=>{"content"=>""}}, "4"=>{"id"=>"105", "answers"=>{"content"=>""}}, "5"=>{"id"=>"106", "answers"=>{"content"=>""}}, "6"=>{"id"=>"107", "answers"=>{"content"=>""}}, "7"=>{"id"=>"108", "answers"=>{"content"=>""}}}, "status"=>"Not Reviewed", "current_step"=>"", "account_id"=>"1"}}
 SQL (0.8ms) SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'

 Form Load (0.2ms) SELECT "forms".* FROM "forms" WHERE "forms"."id" = 16 LIMIT 1
 Question Load (1.1ms) SELECT "questions".* FROM "questions" WHERE "questions"."id" IN (101, 102, 103, 104, 105, 106, 107, 108) AND ("questions".form_id = 16) ORDER BY position ASC
WARNING: Can't mass-assign protected attributes: answers
WARNING: Can't mass-assign protected attributes: answers
WARNING: Can't mass-assign protected attributes: answers
WARNING: Can't mass-assign protected attributes: answers
WARNING: Can't mass-assign protected attributes: answers
WARNING: Can't mass-assign protected attributes: answers
WARNING: Can't mass-assign protected attributes: answers
WARNING: Can't mass-assign protected attributes: answers
Redirected to http://vol.dev/forms/16
Completed 302 Found in 208ms

Обновление 2

Когда я добавляю answers на attr_accessible в question.rb я получаю ActiveRecord::UnknownAttributeError (unknown attribute: answers)

3 ответа

Я оставил все в своих моделях, но я сделал это в форме:

= f.fields_for :questions do |q|
 = q.fields_for :answer, q.object.answer do |a|
 = a.hidden_field :question_id, :value => q.object.id
 = a.hidden_field :form_id, :value => @form.id
 %p
 = a.label :content, q.object.content
 %br
 = a.text_area :content

И он отлично работает. Если есть какая-либо переработка или что-либо, не стесняйтесь прокомментировать это.


Имел ту же проблему на моем конце Марк.

Две причины, почему это не работает для вас:

  1. Ваша ассоциация была has_one между question и answer поэтому вам нужно использовать единственную версию в своих аргументах fields_for:

    q.fields_for :answer

  2. Вам нужно построить ответ на вопрос (желательно у вашего контроллера):

    question.build_answer

Вы закончили тем, что делали это в своем новом коде формы, который вы отправили в качестве ответа, но я подумал, что объясню, почему это сработало.

Ура,

JP


Вы должны иметь attr_accessible для вопросов в form.rb

attr_accessible :questions_attributes

Возможно, вам придется добавить все остальные поля в form.rb тоже к attr_accessible.

licensed under cc by-sa 3.0 with attribution.