Как сделать зависимые записи неактивными, но не уничтожать, используя проблемы - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть модель с именем runningmenu. Я хочу отключить ее при уничтожении, но не при удалении, а также хочу отключить все зависимые записи, например, заказы

.

Я использую ruby ​​2.4.0 и rails 5. Я пытался использовать активные записи о проблемах. Перед уничтожением я вызываю проблему. Остановите уничтожение, чтобы перевернуть delete_status и бросить abort. когда я прерываю работу с зависимыми записями, он отправляет не удалось уничтожить исключение в действующее меню уничтожить действие. Но он просто прерывается при первой записи и не делает все зависимые записи неактивными.

module Deletable
  extend ActiveSupport::Concern
  def stop_destroy
    self.deleted!
    throw(:abort)
  end

  def stop_destroy_for_orders
    self.update_column(:status, Order.statuses[:cancelled])
    throw(:abort)
  end
end

ON Заказ модели у меня:

before_destroy -> { stop_destroy_for_orders }

на модели бегущего меню, у меня есть:

has_many :orders, dependent: :destroy
before_destroy -> { stop_destroy }

ожидаемый результат - сделать все зависимые от runmenu дочерние элементы неактивными при удалении, но не при удалении. Но теперь только статус первого экземпляра установлен на отмену и откат назад.

1 Ответ

0 голосов
/ 09 апреля 2019

Я не знаю, довольны ли вы использованием драгоценных камней или нет, но одна из самых популярных - это паранойя:

https://github.com/rubysherpas/paranoia

bin/rails generate migration AddDeletedAtToOrders deleted_at:datetime:index

Добавьте столбец delete_at к вашим заказам, затем запустите rake db:migrate, чтобы добавить столбец в вашу базу данных. В ваших заказах модель:

class Order < ActiveRecord::Base
  acts_as_paranoid

  # ...
end

Теперь, когда вы вызываете Order.destroy, запись не будет удалена, но будет обновлен столбец delete_at со временем «удаления». Это добавит область заказов по умолчанию к заказам, то есть, если вы сделаете Order.all, он будет возвращать только заказы с нулевым удаленным_кателем. Дополнительные команды о том, как действительно удалить запись и включить ее в области действия, включены в их github выше.

...