Ruby on rails 有多个嵌套表单,其中有一个嵌套表单

Ruby on rails 有多个嵌套表单,其中有一个嵌套表单,ruby-on-rails,ruby,nested-forms,nested-attributes,Ruby On Rails,Ruby,Nested Forms,Nested Attributes,我目前正在尝试为一个模型创建一个表单,它具有动态数量的嵌套模型。我使用的是嵌套表单(如中所述)。为了使事情更加复杂,我的每个嵌套模型都有一个与第三个模型的关联,我也想将其添加到表单中 对于任何想知道过度规范化或不当方法的人来说,这个例子是我所面临问题的简化版本。事实上,事情稍微复杂一些,这就是我们决定采取的方法 下面是一些示例代码来说明问题: #模型 课堂测试 属性可访问:测试名称,:测试描述,:问题属性 有很多问题吗 接受以下问题的\u嵌套\u属性\u 结束 课堂提问 属性可访问:问题,:答案

我目前正在尝试为一个模型创建一个表单,它具有动态数量的嵌套模型。我使用的是嵌套表单(如中所述)。为了使事情更加复杂,我的每个嵌套模型都有一个
与第三个模型的关联,我也想将其添加到表单中

对于任何想知道过度规范化或不当方法的人来说,这个例子是我所面临问题的简化版本。事实上,事情稍微复杂一些,这就是我们决定采取的方法

下面是一些示例代码来说明问题:

#模型
课堂测试
属性可访问:测试名称,:测试描述,:问题属性
有很多问题吗
接受以下问题的\u嵌套\u属性\u
结束
课堂提问
属性可访问:问题,:答案属性
属于:测试
你有一个答案吗
接受\u嵌套的\u属性\u for:answer
结束
课堂答案
属性:答案
属于:问题
结束
#控制器
类TestsController

此代码示例完全适用于问题的第一个实例。当动态添加要创建的另一个问题时,会发生问题;答案字段不显示。我相信这是因为它们只是为控制器中的第一个问题而构建的。有没有办法使用嵌套的属性来实现这一点?

我在这里解决了自己的问题。我所做的不是在控制器中构建答案模型(这在您不知道视图中有多少问题时是不可能的),而是在调用fields_时构建它:

#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 %>
#控制器
类TestsController

这是因为,无论视图上构建了多少个问题表单,都会构建一个特定于所构建问题的新答案。

很高兴您找到了答案。感谢您发布的解决方案。对于那些在这个问题上遇到问题的人:考虑使用RYANB的NeStdEm表单宝石。它将为您提供非常棒的添加和删除视图帮助的链接。