使用fields_for - Rails创建多个记录

时间:2017-08-06 15:41:52

标签: ruby-on-rails ruby

我有两个模型,tasklist_itemstask has_many list_itemstask但是如果用户想要一个表单中的所有内容,我希望能够创建list_items和许多<%= form_for @task, url: account_assignment_tasks_path(@assignment), method: :create do |form| %> <%= form.text_field :description, class: "form-input #{error_class}" %> <%= fields_for :list_items, @all_list_items do |list_item_form| %> <%= list_item_form.text_field :description, class: "form-input list-item", data: { list_item_field: "true" } %> <% end %> <% end %> 。以下是目前的情况:

FORM

 def new
   @task = @assignment.tasks.new
   @list_item = @task.list_items.build
   @all_list_items = []
 end

任务控制器

undefined method `description' for []:Array

基本上我要做的是创建多个列表项和一个创建任务。但是,如果我提交表格

,我现在收到此错误

错误

$(document).ready(function() {
    $('#dataTable').DataTable( {      
         "searching": false 
    });
});

有人知道我做错了什么以及如何实现这个目标?

1 个答案:

答案 0 :(得分:1)

  

未定义的方法`描述&#39; for []:Array

为了描述错误原因,fields_for接受record_object作为第二个参数,fields_for将其用于构建字段。在这里,您传递@all_list_items这是一个数组,导致错误。

错误解决方法:

您应该传递@list_item而不是@all_list_items

<%= fields_for :list_items, @list_item do |list_item_form| %>

解决实际问题:

由于您要创建多个list_items,您应该

def new
  @task = @assignment.tasks.new
  x.times do
    @list_item = @task.list_items.build
  end
  @all_list_items = []
end

其中x是您要创建的list_items的数量,例如,如果您要创建三个list_items,请将x替换为3

使用cocoon gem动态创建嵌套表单。