Rails 5.1.4 fields_for用于多个对象

时间:2018-05-08 06:09:37

标签: ruby-on-rails ruby

我有AuthorBook型号。作者可以有多个Book,但一本书只能有一个Author

在创建新Author期间,如何添加"新书"按钮,它将为Author表单添加fields_for?我希望能够添加多个Book。到目前为止,我找到的solution只是添加固定数量的fields_for,如下所示:

<%= form_with(model: author, local: true) do |form| %>
...
    <% 5.times do %>
        <%= form.fields_for :books do |books| %>
        ...
        <% end %>
    <% end %>
...
<% end %>

我不希望它像这样,如果作者有超过5本书怎么办?我希望能够动态添加书籍。任何解决方案?

2 个答案:

答案 0 :(得分:3)

如果您添加新的依赖项,那么cacoon gem就可以了,它可以让您更轻松地处理嵌套表单。

它是一个额外的依赖项,但添加新关联记录的代码很简单:

cons

答案 1 :(得分:0)

author.rb

accepts_nested_attributes_for :books,
    :allow_destroy => true,
    :reject_if     => :all_blank

在您的视图文件中

<div class="bank_account_details">
  <%= f.fields_for :bank_account_details do |builder| %>
    <p>
    Book: <%= builder.text_field :name %>
          <%= builder.check_box :_destroy %>
          <%= builder.label :_destroy, "Remove Book" %>
    </p>
  <% end %>
<div>
<%= link_to_add_fields "Add Book", f ,:books %>

在控制器中添加参数

params.require(:author).permit(:name, books_attributes: [:id, :name, :_destroy])