Я пытаюсь создать вложенную форму и у меня возникают проблемы при использовании страницы редактирования ресурса.Я могу заставить новое действие работать нормально, но я нахожу, что если я пытаюсь обновить ресурс, чтобы включить новый подресурс, он не сохраняет подресурсы.
Я использую rails 5.2 и у меня есть коконустановлен для вложенных форм.
order
имеет много cards
Модель заказа:
class Order < ApplicationRecord
has_many :cards, dependent: :destroy
accepts_nested_attributes_for :cards, allow_destroy: true
end
Модель карты:
class Card < ApplicationRecord
belongs_to :order
end
Контроллер заказов:
class OrdersController < ApplicationController
def index
@orders = Order.all
end
def new
@order = Order.new
@order.cards.build
end
def create
@order = Order.new(order_params)
if @order.save
redirect_to order_path(@order)
else
render 'new'
end
end
def show
@order = Order.find(params[:id])
end
def edit
@order = Order.find(params[:id])
@order.cards.build
end
def update
@order = Order.find(params[:id])
if @order.update_attributes(order_params)
redirect_to order_path(@order)
else
render 'edit'
end
end
def destroy
@order = Order.find(params[:id])
@order.destroy
redirect_to orders_path
end
private
def order_params
params.require(:order).permit(:title, :price, cards_attributes: [:id, :title, :price, :_destroy])
end
end
Вид редактирования заказов:
<%= form_for @order do |f| %>
<%= f.fields_for :cards do |card| %>
<%= render 'card_fields', f: card %>
<% end %>
<%= link_to_add_association f, :cards, class: "add-cards" do %>
<span>Add Card</span>
<% end %>
<%= f.submit "Update" %>
<% end %>
Частичный вид заказов:
<div class="nested-fields">
<%= f.label :title, 'Card Description', class: "g-mb-10" %>
<%= f.text_field :title, class: "form-control form-control-md g-brd-gray-light-v7 g-brd-lightblue-v3--focus g-rounded-4 g-px-20 g-py-12" %>
<%= link_to_remove_association f, class: "remove-quals u-link-v5 d-flex align-items-center g-color-lightblue-v3 g-ml-30" do %>
<span class="g-ml-15">Remove Card</span>
<% end %>
</div>
Теперь, если я добавлю @order.cards.build
к edit
действие работает, но если новая карта не добавлена, она все равно создает пустую запись.Также, если я изменю accepts_nested_attributes_for :cards, allow_destroy: true
на accepts_nested_attributes_for :cards, allow_destroy: true, reject_if: proc { |attributes| attributes['price'].blank? }
Это работает, если ни один из других элементов не обновляется одновременно.
В идеале, когда кто-то идет на редактирование заказановая карта не должна быть видна до тех пор, пока кто-то не нажмет кнопку добавить карту.
Любая помощь будет очень полезна.
Спасибо