我有两个模型,task
and list_items
. a task
有很多list_items
。但我希望能够创造task
还有很多list_items
如果用户想要所有内容都以一种形式。这是目前的样子:
FORM
<%= 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
基本上我想做的是创建多个列表项和一个创建任务。但现在如果我提交表单,我会收到此错误
ERROR
undefined method `description' for []:Array
有谁知道我做错了什么以及如何实现这一目标?
[]: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
where x
是多少list_items
您想要创建,例如,如果您想创建三个list_items
,然后替换x
with 3
.
OR
Use cocoon https://github.com/nathanvda/cocoongem 动态创建嵌套表单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)