我目前正在試圖爲一個模型,它有一個動態數量的嵌套模型的窗體。我正在使用嵌套表單(如RailsCasts 197中所述)。爲了使事情更加複雜,我的每個嵌套模型都有一個與第三個模型的has_one
關聯,我還希望將其添加到表單中。has_many嵌套窗體中有一個has_one嵌套窗體
對於任何想過度規範化或不正確的方法的人來說,這個例子是我面對的問題的簡化版本。事實上,情況稍微複雜一些,這是我們決定採取的方法。
一些示例代碼來說明這個問題如下:
#MODELS
class Test
attr_accessible :test_name, :test_description, :questions_attributes
has_many :questions
accepts_nested_attributes_for :questions
end
class Question
attr_accessible :question, :answer_attributes
belongs_to :test
has_one :answer
accepts_nested_attributes_for :answer
end
class Answer
attr_accessible :answer
belongs_to :question
end
#CONTROLLER
class TestsController < ApplicationController
#GET /tests/new
def new
@test = Test.new
@questions = @test.questions.build
@answers = @questions.build_answer
end
end
#VIEW
<%= form_for @test do |f| %>
<%= f.label :test_name %>
<%= f.text_box :test_name %>
<%= f.label :test_description %>
<%= f.text_area :test_description %>
<%= f.fields_for :questions do |questions_builder| %>
<%= questions_builder.label :question %>
<%= questions_builder.text_box :question %>
<%= questions_builder.fields_for :answer do |answers_builder| %>
<%= answers_builder.label :answer %>
<%= answers_builder.text_box :answer %>
<% end %>
<% end %>
<%= link_to_add_fields 'New', f, :questions %>
<% end %>
此代碼示例一起完全發揮作用問題的第一個實例。當另一個問題被動態添加以創建時,會發生該問題;答案字段不顯示。我相信這是因爲它們只是爲控制器中的第一個問題而建立的。有沒有辦法使用nested_attributes來實現這一點?
對於絆倒在這個問題上的人:考慮使用ryanb的nested_form gem。它會爲你提供很棒的link_to_add和link_to_remove視圖助手。 – 2015-01-02 14:37:34