Вместо того, чтобы удалять записи из базы данных, мы можем удалить их с небольшим количеством кода и конфигурации.
Создайте новый каталог в вашем приложении / каталог под названием «проблемы».
Создайте в этом каталоге новый файл с именем "retireable.rb".
Скопируйте и вставьте в него следующий код:
module Retireable
extend ActiveSupport::Concern
included do
default_scope :conditions => { :retired => false }
scope :retired, :conditions => { :retired => true }
end
def destroy
retire
end
def destroy!
raise StandardError, "Cannot destroy!"
end
def retire
update_attribute :retired, true
update_attribute :retired_at, Time.now
end
def retired?
retired
end
end
4) Каждая из ваших моделей, которым требуется эта функция, должна:
4a) иметь логическое поле 'retired
' и поле даты / времени * retired_at
.в схеме базы данных.
4b) include Retireable
должен находиться в пределах определения класса для этой модели;то есть
class User < ActiveRecord::Base
include Retireable
...
5) В вашем 'config/application.rb
' добавьте следующую строку:
config.autoload_paths << "#{Rails.root}/app/concerns"
Теперь вызывает instance.destroy (например, @ user.destroy, @group.destroy) будет обрабатываться списанным, поэтому не удаляется из базы данных и не нарушает связь.
Надеюсь, это поможет!