В настоящее время я пытаюсь сделать форму для модели с динамическим числом вложенных моделей. Я использую вложенные формы (как описано в 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?
Для людей, которые спотыкаются на этот вопрос: рассмотрите возможность использования драгоценного камня nested_form от ryanb. Он предоставит вам потрясающие ссылки link_to_add и link_to_remove. –