正在用 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 的不多啊,不知道这样的解决方案有没有什么问题。