我有一个用户模型和Todo模型。我希望能够使用单一表单添加多个待办事项。
路线:
# Users
resources(:users) do
resources(:todos)
end
用户模型:
class User < ApplicationRecord
has_many :todos
....
Todos控制器:
class TodosController < ApplicationController
def new
@user = User.find(params[:id])
@todos = Array.new(10) {@user.todos.build}
end
....
查看待办事项/新:
<%= form_for([@user, :todos]) do |f| %>
<% @todos.each do |todo| %>
<%= f.text_field(:name, class: "form-control") %>
<% end %>
<%= f.submit "Save", class: "btn btn-primary" %>
<% end %>
我得到的是:
undefined method `model_name' for :todos:Symbol
我做错了什么?我搜索SO使用一个表单进行多次保存,然后我找到了this。
答案 0 :(得分:1)
我相信您正在寻找嵌套表格。
在您的模型中,您将添加
accepts_nested_attributes_for :todos
并在您的视图中
<%= form_for @user do |f| %>
TODO:
<ul>
<%= f.fields_for :todo do |todo| %>
<li>
<%= todo.label :todo %>
<%= todo.text_field :todo %>
</li>
<% end %>
</ul>
<%= f.submit "Save", class: "btn btn-primary" %>
<% end %>
控制器中的
def new
@user = User.find(params[:id])
10.times {@user.todos.build}
end
用于参考http://guides.rubyonrails.org/form_helpers.html#nested-forms
注意:此代码未经测试
答案 1 :(得分:0)
在您看来,请尝试
<%= form_for([@user, @user.todos]) do |f| %>
我也是红宝石的新手,但希望它有效。