HAS_MANY嵌套形式与在其内一个HAS_ONE嵌套形式(has_many nested form

2019-09-01 18:34发布

我目前正在做一个形式的模型,其中有嵌套模型的动态数量。 我使用嵌套形式(如描述RailsCasts 197 )。 为了让更复杂的事情,我的每一个嵌套模式有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?

Answer 1:

我在这里解决我自己的问题。 我所做的,而不是建立在控制器中的答案模式(这是不可能的,当你不知道的许多问题将如何在视图中进行),我建立了它调用fields_for时:

#CONTROLLER
class TestsController < ApplicationController

  #GET /tests/new
  def new
    @test = Test.new
    @questions = @test.questions.build
  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, @questions.build_answer do |answers_builder| %>
      <%= answers_builder.label :answer %>
      <%= answers_builder.text_box :answer %>
    <% end %>
  <% end %>
  <%= link_to_add_fields 'New', f, :questions %>
<% end %>

这工作,因为无论有多少问题形式是如何被建立在视图,正在兴建具体到问题的新的答案是建立。



文章来源: has_many nested form with a has_one nested form within it