Obecnie próbuję utworzyć formularz dla modelu, który ma dynamiczną liczbę modeli zagnieżdżonych. Używam zagnieżdżonych formularzy (jak opisano w RailsCasts 197). Aby jeszcze bardziej skomplikować, każdy z moich modeli zagnieżdżonych ma skojarzenie has_one
z trzecim modelem, który również chciałbym dodać do formularza.has_many zagnieżdżony formularz z formularzem zagnieżdżonym has_one w nim
Dla każdego, kto zastanawia się nad normalizacją lub niewłaściwym podejściem, ten przykład jest uproszczoną wersją problemu, z którym się borykam. W rzeczywistości sprawy są nieco bardziej złożone i takie podejście postanowiliśmy podjąć.
Niektóre przykładowy kod do zilustrowania problemu poniżej:
#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 %>
Kod ten przykład działa w pełni w pierwszej instancji pytanie. Problem występuje, gdy kolejne pytanie jest dynamicznie dodawane do utworzenia; pola odpowiedzi nie są wyświetlane. Uważam, że dzieje się tak dlatego, że są zbudowane tylko dla pierwszego pytania kontrolera. Czy istnieje sposób osiągnięcia tego przy użyciu nested_attributes?
Dla osób, które natkną się na to pytanie: rozważ użycie gem nested_form z ryanb. Dostarczy Ci niesamowitych pomocników widoku link_to_add i link_to_remove. –