У меня есть модель User, для каждого пользователя у меня есть список флажков для переключения определенных настроек. Настройки исходят из модели предпочтений. Между ними есть модель UserPreference для хранения отношения.
Этого легко достичь в форме с помощью simple_form:
= f.association :preferences, as: :check_boxes
Теперь я хочу адаптировать модель UserPreference для мягкого удаления ассоциаций вместо полного их удаления. Для этого я установил discard
gem, который в основном просто добавляет несколько областей и сброшенную метку времени.
Проблема в том, что при управлении настройками через пользовательскую модель кажется, что метод уничтожения не вызывается в модели UserPreference. Я попытался создать обратный вызов, но я не могу перехватить вызов, чтобы уничтожить. Как я могу подключиться к логике рельсов, чтобы вызвать сброс в связанном экземпляре вместо уничтожения?
# this doesn't work
class UserPreference < ApplicationRecord
include Discard::Model
before_destroy :force_soft_delete
default_scope -> { kept }
belongs_to :user
belongs_to :preference
def force_soft_delete
self.discard
throw :abort
end
end