在Rails中,提交包含多个对象的表单通常需要使用嵌套表单(nested forms)。嵌套表单允许你在一个表单中同时创建和更新多个相关的对象。以下是一个简单的例子,说明如何在Rails中创建一个包含多个对象的表单。
首先,确保你的模型关系已经设置好。例如,假设你有一个Author
模型和一个Book
模型,并且Author
模型has_many
的Book
模型。
class Author< ApplicationRecord
has_many :books
accepts_nested_attributes_for :books
end
class Book< ApplicationRecord
belongs_to :author
end
接下来,在AuthorsController
中,确保你允许books_attributes
的参数传递。
def author_params
params.require(:author).permit(:name, books_attributes: [:id, :title, :_destroy])
end
然后,在app/views/authors/_form.html.erb
文件中创建一个嵌套表单。
<%= form_with(model: author, local: true) do |form| %>
<%= form.label :name %>
<%= form.text_field :name %>
<%= form.fields_for :books do |book_form| %>
<%= book_form.label :title %>
<%= book_form.text_field :title %>
<% end %>
<%= form.submit "Submit" %>
<% end %>
这个表单允许你在创建和更新Author
时同时创建和更新多个Book
对象。
在这个例子中,我们使用了accepts_nested_attributes_for
方法来允许Author
接受嵌套的Book
属性。同时,在author_params
方法中,我们使用permit
方法来允许books_attributes
的参数传递。
最后,在app/views/authors/_form.html.erb
文件中,我们使用fields_for
方法来创建一个嵌套表单,这样你就可以在一个表单中同时创建和更新多个相关的对象。
领取专属 10元无门槛券
手把手带您无忧上云