Обратные вызовы для объектов, которые обновляются при удалении из коллекции отношений, по-видимому, не выполняются для меня.
У меня есть модель EntityLocation, которая служит полиморфным отношением между сущностями (Пользователи / Места / Вещи) и Locations (Zips, Адреса, Соседства).
class EntityLocation < ActiveRecord::Base
belongs_to :entity, :polymorphic => true
belongs_to :location, :polymorphic => true
def after_save
if entity_id.nil? || location_id.nil?
# Delete me since I'm no longer associated to an entity or a location
destroy
end
end
end
Для этого примера, давайте предположим, что у меня есть «Вещь» с коллекцией «Locations», на которую ссылается my_thing.locations.Это возвращает коллекцию Zip, Address и т. Д.
Если я напишу код
my_thing.locations = [my_thing.locations.create(:location => Zip.find(3455))]
, то, как ожидается, будет создан новый объект EntityLocation, на который можно будет точно ссылаться из my_thing.locations.Однако проблема в том, что записи, которые ранее содержались в этой коллекции, теперь теряются в базе данных с атрибутом nil entity_id.Я пытаюсь удалить эти объекты в обратном вызове after_save, однако он никогда не выполняется на старом объекте.
Я также пытался использовать after_update и after_remove, и ни один из них не вызывается для старой записи.Вновь созданная запись обратного вызова after_save действительно вызывается, как и ожидалось, но это не помогает мне.
Обновляет ли Rails ранее указанный объект без выполнения цепочки обратного вызова через активную запись?Все идеи приветствуются.Спасибо.