Rails 5.1.4 fields_for для нескольких объектов - PullRequest
0 голосов
/ 08 мая 2018

У меня есть модели Author и Book. Автор может иметь много Book, но Книга может иметь только один Author.

Как добавить кнопку "Новая книга" при создании новой Author, которая добавит fields_for для формы Author? Я хочу иметь возможность добавить более одного Book. Итак, решение , которое я нашел, состоит в том, чтобы просто добавить фиксированное число 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 голосов
/ 08 мая 2018

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])
0 голосов
/ 08 мая 2018

Если у вас все в порядке с добавлением новой зависимости, есть 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%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...