使用simple_form和rails 4创建多个嵌套表单

use*_*445 13 ruby ruby-on-rails simple-form ruby-on-rails-4

我正在尝试使用以下模型创建一个简单的应用程序:类别 - [has_many] - >问题 - [has_many] - >答案

我有以下用于创建类别+问题的代码(categories/_form.haml.html):

= simple_form_for(@category) do |f|
  = f.error_notification
  = f.input :title, label: "Category title: "
  = f.simple_fields_for :questions, @category.questions.build do |q|
    = q.input :content, label: "Question content: "
  = f.button :submit
Run Code Online (Sandbox Code Playgroud)

我正在使用所有相同的代码来创建问题+答案(questions/_form.haml.html).我有所有关系,强大的参数,嵌套的attrs和控制器配置,它对我来说很好.

两个问题:

  1. 如何在类别/ _form.haml.html中创建多个问题?

  2. 如何一次为每个问题创建类别+多个问题+多个答案(在categories/_form.haml.html中)?

我花了几个小时试图弄清楚如何完成第二个,我能找到的所有信息都与Rails 3.0和form_for有关.他们都没有为我工作.

这里最直接的解决方案应该是这样的:

= simple_form_for(@category) do |f|
  = f.error_notification
  = f.input :title, label: "Category title: "
  = f.simple_fields_for :questions, @category.questions.build do |q|
    = q.input :content, label: "Question content: "
    = q.simple_fields_for :answers, q.questions.build do |a|
      = a.input :content, label: "Answer content"
  = f.button :submit
Run Code Online (Sandbox Code Playgroud)

但它给了我

undefined method `questions' for #<SimpleForm::FormBuilder:
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

Edg*_*ons 12

你在这里弄错了:= q.simple_fields_for :answers, q.questions.build do |a|questions在构建器对象q而不是模型对象上调用方法.可能你想要这个:

= q.simple_fields_for :answers, q.object.questions.build
Run Code Online (Sandbox Code Playgroud)