2

我想知道是否有一种方法可以在 Mongoid 映射器中的 Embedded_in 对象上触发 after_save 回调。

例子:

i = Image.new(:file => file)
user.images << i
# => i.after_save should be triggered here

我知道,如果我i.save在单词后调用,它会触发,但是在我的代码中很难记住这样做。

此外,调用user.images.create(:file => file)不是一种选择,因为我会检查以确保同一个文件没有上传两次。

4

2 回答 2

3

好的,这是一个老问题,但是对于最新的 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# 触发乐队、专辑和标签上的所有保存回调。

于 2013-03-16T16:08:19.463 回答
2

唯一真正的解决方案是调用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

于 2010-11-22T10:02:11.397 回答