Mongoidはメソッドを定義しませんが、組み込み接続がいつ変更されるかを追跡するためにconnections_changed?
仮想フィールドを使用して自分でメソッドを定義できます。User
あれは:
class User
# define reader/writer methods for @connections_changed
attr_accessor :connections_changed
def connections_changed?
self.connections_changed
end
# the connections are no longer considered changed after the persistence action
after_save { self.connections_changed = false }
before_save :run_connection_callback, :if => :connections_changed?
end
class Connection
embedded_in :user
before_save :tell_user_about_change, :if => :changed?
def tell_user_about_change
user.connections_changed = true
end
end
この方法の欠点の1つはuser.connections_changed
、ドキュメントが保存されたときにのみ設定されることです。Connection
before_save
コールバックは、コールバックが最初に呼び出され、次にコールバックが呼び出されるようにカスケードされUser
before save
ます。これにより、上記のコードがこのユースケースで機能するようになります。ただし、を呼び出す前に接続が変更されたかどうかを知る必要がある場合save
は、別のメソッドを見つける必要があります。