Trigging After_save на встроенном элементе при назначении его через «<<» в мондоиде?
-
29-09-2019 - |
Вопрос
Мне было интересно, был ли способ вызвать обратный вызов After_save на объекте Embedded_in в Mongoid Mapper.
Пример:
i = Image.new(:file => file)
user.images << i
# => i.after_save should be triggered here
Я знаю, что если я позвоню i.save
После слов он будет стрелять, однако очень трудно помнить, чтобы сделать это во всем моем коде.
Также звонит user.images.create(:file => file)
Не является вариантом, потому что я делаю проверку, чтобы убедиться, что один и тот же файл не загружен дважды.
Решение
Единственное реальное решение - звонить save
на встроенном документе. Вот способ сделать это автоматически:
class User
references_many :images do
def <<(new_elm)
returner = super
new_elm.save
returner
end
end
end
Больше информации здесь:
Другие советы
Хорошо, это старый вопрос, но с последним монгоидом вы можете использовать:
http://mongoid.org/en/mongoid/docs/relations.html.
Каскадные обратные вызовы
Если вы хотите встроенные обратные вызовы документов, чтобы пожарить при вызове операции настойчивости на своем родиве, вам нужно будет предоставить параметр Cascade Callbacks к соотношению.
Каскадные обратные вызовы доступны только на embeds_one
и embeds_many
связи.
class Band
include Mongoid::Document
embeds_many :albums, cascade_callbacks: true
embeds_one :label, cascade_callbacks: true
end
band.save
# Пожали все сохраняют обратные вызовы на полосе, альбомах и метке.