在轨道上一次创建多个记录ruby

时间:2017-09-11 21:20:19

标签: ruby-on-rails ruby activerecord

这似乎相当简单,但事实证明并非如此。

我有两个模型:作者和书籍。作者有很多书,书籍属于作者。我希望能够以单一形式添加许多书籍,每个书籍都有不同的作者和信息。

class BooksController < ApplicationController

def new
 @books = []
  5.times do
    @books << Book.new
  end
end

我不确定这是否是形成控制器的正确方法。观点如下:

<%= form_tag(books_path(@books)) %>
 <% @books.each do |book| %>
  <%= text_field_tag(:title) %>
  <%= text_field_tag(:author) %>
  <%= text_field_tag(:pages) %>
 <% end %>
<%= submit_tag("Submit") %> 

就我而言,因为我无法让@books最终出现在我的参数中,所以我还没有尝试过创建方法。所有我得到的是:标题,作者和:最后一条记录的页面,它们甚至不在书籍参数中。

1 个答案:

答案 0 :(得分:2)

form_tag不知道您的模型对象。所以它不会将你的参数包装在适当的键下。您应该使用form_for来避免构造参数的麻烦。

要创建关联对象,您可以使用accepts_nested_attributes_for

要创建多个对象,您需要send their params to your controller in an array。但我建议你只保存单曲。您的代码会更清晰,您可以利用Rails表单帮助程序,例如form_forfields_for,而不是手动构建HTML代码。