現在、ネストされたモデルの動的番号を持つモデルのフォームを作成しようとしています。私は入れ子フォームを使用しています(RailsCasts 197で説明)。物事をさらに複雑にするために、それぞれのネストされたモデルは、has_one
という3番目のモデルとの関連付けを持っています。これもフォームに追加したいと思っています。has_oneネストされたフォームの中に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ビューヘルパーを提供します。 –