【问题标题】:Rails 5.1.4 fields_for for multiple objectsRails 5.1.4 fields_for 用于多个对象
【发布时间】:2018-05-08 06:09:37
【问题描述】:

我有一个 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本书怎么办?我希望能够动态添加书籍。有什么解决办法吗?

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

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

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

<%= form_for author do |f| %>
  ...
  <%= f.fields_for :books do |book| %>
    <%= render 'book_fields', f: book %>
    <%= link_to_add_association 'add book', f, :books %>
  <%end%>

【讨论】:

    【解决方案2】:

    作者.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])
    

    【讨论】:

    • 这看起来真的不完整。 Afaik link_to_add_fields 方法在 rails 中不存在。 link_to_add_fields 怎么知道要渲染什么?您使用哪个 gem 来提供此功能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多