0

誰かがこれで私を正しい方向に向けることができることを願っています。

updateメソッドが呼び出される前に DataMapper を使用して新しいプロパティ値と古いプロパティ値の両方を表示/取得し、値を比較する方法があるかどうかを知りたいです。

シナリオは次のとおりです。チケット リソースがあり、チケットに加えられた変更についてさまざまな関係者に通知する必要があります。支払い状況が変化したときのメール通知、チケットがサポート スタッフに割り当てられたときの SMS 通知など。

現在、Ticket クラス内で、次のようなコールバック/フィルターを設定しています。

before :update, :notify_changes

def notify_changes
    ticket = Ticket.get(self.id) # Get the original
    if ticket.status != self.status
        # Send out the email notification
    end
    if ticket.assigned_support != self.assigned_support
        # Send out the SMS notification
    end
    # ... etc
end

でデータベースに再度アクセスせずにこれを行うためのより良い、またはより効率的な方法はありますticket = Ticket.get(self.id)か?

4

2 に答える 2

1

わかりました、私はこれを自分で理解しました。これは、他の誰かが同じ質問をしていることに気付いた場合の参考用です。

before :update, :notify_changes

def notify_changes
    # The status property has been changed
    if !dirty_attributes[Ticket.properties[:status]].nil?
       # old status: original_attributes[Ticket.properties[:status]]
    end        

    # The assigned_support property has been changed
    if !dirty_attributes[Ticket.properties[:assigned_support]].nil?
       # old status: original_attributes[Ticket.properties[:assigned_support]]
    end        
end

インスピレーション参照:このスレッド

于 2013-10-13T09:01:05.570 に答える
1

はい、私がそれを尋ねたとき、私は汚いことを指していました。他の誰かがこの質問に出くわした場合に備えて、もう少し追加します。

属性またはモデル オブジェクトのステータスを確認するために呼び出すことができるメソッドがいくつかあります。

- (Boolean) attribute_dirty?(name)
- (Boolean) clean?
- (Boolean) dirty?
- (Hash) dirty_attributes # your choice
- (Hash) original_attributes

これらはhttp://rubydoc.info/github/datamapper/dm-core/master/DataMapper/ResourceDataMapper::Resourceの一部であり、ここにあります。

于 2013-10-13T17:32:21.877 に答える