Как вызвать уничтожение обратных вызовов для объекта, который является частью модели соединения, которая автоматически удаляет этот объект?

StackOverflow https://stackoverflow.com/questions/4839895

Вопрос

Рельсы 2.3.8. У меня есть 3 модели, пользователь, источник и подписка.

User  attr_accessible   :source_ids
             has_many   :subscriptions
             has_many   :sources, :through => :subscriptions

Source       has_many   :subscriptions

Subscription belongs_to :user
             belongs_to :source

У меня есть интерфейс, который позволяет пользователю редактировать свои подписки на источник. Он собирает Source_ids и создает или удаляет подписку на основе коллекции. Проблема у меня есть, цитата:

«Автоматическое удаление моделей соединения является прямым, не запускаются никаких вызовов уничтожения».

Подписки удаляются, а не уничтожаются. У меня есть обратный вызов в модели подписки, который не запускается:

before_destroy do |subscription|
  [Some irrelevant object not to be mentioned].destroy
end

Мой вопрос: как я могу вызвать этот обратный вызов, когда подписка автоматически удалена из -за модели соединения?

Это было полезно?

Решение

Отвечая на ваш ответ в HMT collection_singular_ids = Удаление моделей соединения является прямым, не запускаются никакие вызовы уничтожения

Измените эту строку:

 has_many :users, :through => :memberships

К этому:

 has_many :users, :through => :memberships, :after_remove => :your_custom_method

И определить защищенную your_custom_method в пользовательской модели. Таким образом, когда пользователь удаляет подписку на какой -то источник, этот метод вызывается.

Удачи!

Другие советы

@user.subscriptions.delete
has_many   :subscriptions, :dependent => :destroy    # <- setting this on the association  will destroy the related subscriptions
has_many   :subscriptions, :dependent => :delete_all # <- setting this on the association  will delete the related subscriptions

От RDOC:

collection.delete (объект,…)
Удаляет один или несколько объектов из коллекции, установив их иностранные ключи на NULL. Анкет Объекты будут дополнительно уничтожены, если они связаны с :dependent => :destroy, и удалили, если они связаны с :dependent => :delete_all

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top