0

希望有人能以此为我指明正确的方向。

我想知道是否有一种方法可以在调用该方法之前使用 DataMapper 查看/获取新旧属性值update并比较这些值。

场景如下:我有一个工单资源,我需要通知各个相关方有关工单的更改。付款状态更改时的电子邮件通知,票证分配给支持人员时的短信通知等。

目前,在我的 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

这些是其中的一部分,DataMapper::Resource可以在这里找到: http ://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Resource

于 2013-10-13T17:32:21.877 回答