在mongoid中通过'<<'分配嵌入项时触发on_save?

我想知道是否有办法在Mongoid映射器中的embedded_in对象上触发after_save回调。

例:

i = Image.new(:file => file) user.images < 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

好的,这是一个老问题,但是对于最新的Mongoid,你可以使用:

http://mongoid.org/en/mongoid/docs/relations.html

级联回调

如果希望在对其父级调用持久性操作时触发嵌入式文档回调,则需要为该关系提供级联回调选项。

级联回调仅适用于embeds_oneembeds_many关系。

 class Band include Mongoid::Document embeds_many :albums, cascade_callbacks: true embeds_one :label, cascade_callbacks: true end 

band.save #触发乐队,专辑和标签上的所有保存回调。