2012-03-09 87 views
0

下面的代碼:嵌套屬性的形式呈現不屬性fields_for正確

= 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 

什麼的text_area的name屬性應爲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

當我在question.rb添加answersattr_accessible我得到ActiveRecord::UnknownAttributeError (unknown attribute: answers)

回答

1

我離開了我的一切模型作爲是,但我這樣做是爲了形式:

= 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 

而且它完美的作品。如果有任何改進或任何東西可以隨意對此發表評論。

0

您需要在form.rb中有attr_accessible問題

attr_accessible :questions_attributes 

您可能需要將form.rb中的所有其他字段也添加到attr_accessible。

+0

已經有我的'form.rb'。所以那不太可惜。謝謝。 – Marc 2012-03-09 21:53:34

0

對我的結局Marc有同樣的問題。

爲什麼這不是爲你工作的兩個原因是:

  1. 你的公會是questionanswer之間的has_one,所以你需要在你的fields_for參數使用單一版本:

    q.fields_for :answer

  2. 你需要建立一個問題的答案(在你的控制器,最好):

    question.build_answer

你結束了在你張貼的答案你的新形式的代碼做這些,但我想我會解釋爲什麼工作。

乾杯,

JP