我有两个模型,task
和list_items
。 task
has_many list_items
。task
但是如果用户想要一个表单中的所有内容,我希望能够创建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 %>
。以下是目前的情况:
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
});
});
有人知道我做错了什么以及如何实现这个目标?
答案 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动态创建嵌套表单。