这似乎相当简单,但事实证明并非如此。
我有两个模型:作者和书籍。作者有很多书,书籍属于作者。我希望能够以单一形式添加许多书籍,每个书籍都有不同的作者和信息。
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最终出现在我的参数中,所以我还没有尝试过创建方法。所有我得到的是:标题,作者和:最后一条记录的页面,它们甚至不在书籍参数中。
答案 0 :(得分:2)
form_tag
不知道您的模型对象。所以它不会将你的参数包装在适当的键下。您应该使用form_for
来避免构造参数的麻烦。
要创建关联对象,您可以使用accepts_nested_attributes_for
。
要创建多个对象,您需要send their params to your controller in an array。但我建议你只保存单曲。您的代码会更清晰,您可以利用Rails表单帮助程序,例如form_for
和fields_for
,而不是手动构建HTML代码。