使用fields_for – Rails创建多个记录
我有两个模型, task
和list_items
。 task
has_many list_items
。 但是我希望能够创建task
和许多list_items
如果用户想要所有的一个forms。 这是目前的样子:
形成
任务控制器
def new @task = @assignment.tasks.new @list_item = @task.list_items.build @all_list_items = [] end
基本上我要做的是创建多个列表项和一个创建任务。 但是,如果我提交表单,我现在收到此错误
错误
undefined method `description' for []:Array
有人知道我做错了什么以及如何实现这个目标?
未定义的方法`description’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动态创建嵌套表单。