Удалить существующую запись вложенного атрибута из базы данных, если вложенный атрибут пуст - PullRequest
0 голосов
/ 07 октября 2019

У меня есть следующий код

order_controller.rb

def update
  order.update(order_params)
  redirect_to client_frequent_orders_path
end

def order_params
  params.require(:order).permit(
    :name,
    order_certifications_attributes: %i[id certification_id name]
  )
end

Модель выглядит следующим образом

order.rb

has_many :order_certifications, dependent: :destroy
has_many :certifications, through: :order_certifications
accepts_nested_attributes_for :order_certifications, allow_destroy: true

Для каждогоЧтобы мы могли выбрать сертификацию из выпадающего списка сертификации.

Учтите, что я выбрал сертификацию с именем cert1 (id = 50). Он заполняется в БД.

Теперь я возвращаюсь к порядку и меняю выбор с cert1 на «Выбрать сертификацию». То есть я удалил выделение из выпадающего списка.

Теперь атрибуты order_certification_attributes не передаются в параметрах.

Таким образом, предыдущий сертификат "cert1" все еще существует в базе данных и отображается встр.

Как удалить существующую запись order_certification, если отправленные в параметрах order_certification_attributes пустые?

1 Ответ

0 голосов
/ 07 октября 2019

Это могло бы быть понятнее, если бы вы показали свою модель (отношения), одно решение могло бы передать _destroy true в форме, другое могло бы быть таким

def update
Order.transaction do
   order.order_certifications.destroy_all if order_params.dig(:order_certification_attributes).blank?
  order.update(order_params)
  redirect_to client_frequent_orders_path
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...