新手问题 [已解决] DataMapper 如何实现在更新一个字段的时候自动触发另一个字段的修改?

everpointer · 2013年06月29日 · 最后由 everpointer 回复于 2013年06月29日 · 2656 次阅读

正在用 Sinatra + DataMapper 写项目,碰到的如题的一个问题。

需求是: 我想更新一个 model 里的:status 字段,:status 关联着一个:update_at(状态更新时间)。我希望的更改方式是,只要我一更新:status, :update_at 就会自动更新成当前时间。

要实现需求,应该是要对:status 设置更新 callback 后者 hook 吧,但是就是不知道怎么做。 网上已经查过资料了,没找到。。DataMapper 能做吗??

在线等,帮帮小弟吧。。

自问自答: 在 rubydoc 中看 DataMapper API 的时候,发现了 dirty_attributes,就想到既然能够知道未保存的 dirty attribute, 只要在 before :save callback 中检查 dirty attributes 中有没有:status 字段,有就更新:updated_at 字段就好了。

测试通过,代码如下:

before :save do
  dirty_attributes.keys.each do |key|
    if key.name == :status
      self.updated_at = DateTime.now
    end
  end
end

P.S. 不过好像社区里用 DataMapper 的不多啊,不知道这样的解决方案有没有什么问题。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号