Trigging After_save на встроенном элементе при назначении его через «<<» в мондоиде?

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

  •  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

Больше информации здесь:

https://github.com/mongoid/mongoid/issues/173.

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

Хорошо, это старый вопрос, но с последним монгоидом вы можете использовать:

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 # Пожали все сохраняют обратные вызовы на полосе, альбомах и метке.

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