Rails - 在一个表单中添加多个记录

时间:2016-09-04 14:04:52

标签: ruby-on-rails

我有一个用户模型和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

2 个答案:

答案 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| %>

我也是红宝石的新手,但希望它有效。