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)また、同じファイルが2回アップロードされていないことを確認するために、呼び出すことはできません。

4

2 に答える 2

3

わかりました、これは古い質問ですが、最新の Mongoid では次を使用できます。

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

カスケード コールバック

親で永続化操作を呼び出すときに埋め込みドキュメント コールバックを起動する場合は、リレーションにカスケード コールバック オプションを提供する必要があります。

embeds_oneカスケード コールバックは、とembeds_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 に答える