Rails 2.3 的新功能 Rails:Touching

已经添加到Rails 2.3中
[quote] What's New in Edge Rails: Touching
Posted by ryan
at 7:51 AM on Monday, April 20, 2009 [/quote]

很多时候,我们希望在相关对象更新的时候,能够通过反射机制更新对应父对象.典型的例子,当主贴有回复的时候,可以更新贴子的最近更新时间.利用ActiveRecord的新功能Touching很容易实现.

那么,通过一个具体例子看看怎么使用:




#主贴对应model
class Article < ActiveRecord::Base
has_many :comments
end

class Comment < ActiveRecord::Base

# 当回复被添加/更新/删除时
# 更新主贴
belongs_to :article, :touch => true
end

# 增加新回复,可以看到主贴时间更新
article.updated_at #=> "Mon Apr 20 07:42:53 -0400 2009"
article.comments.create(:body => "New comment")
article.updated_at #=> "Mon Apr 20 07:43:27 -0400 2009"

# 更新或删除,同样
article.comments.first.destroy
article.updated_at #=> "Mon Apr 20 07:45:23 -0400 2009"


由上可见,touching的功能可以非常简单方便的实现,同步回调,保持一致.

如果,主题的更新时间字段,不想用标准的updated_at.那么,通过简单的修改也可以容易的实现,如下:




class Article < ActiveRecord::Base
has_many :comments
validates_presence_of :last_updated_at # 不是标准的updated_at
end

class Comment < ActiveRecord::Base
belongs_to :article, :touch => :last_updated_at# 注明就可以
end

# 增加新的回复,主贴的更新时间同步更新
article.last_updated_at #=> "Mon Apr 20 07:42:53 -0400 2009"
article.comments.create(:body => "New comment")
article.last_updated_at #=> "Mon Apr 20 07:43:27 -0400 2009"

也可以通过之间调用,实现回调,如下:


article.updated_at #=> "Mon Apr 20 07:42:53 -0400 2009"
article.touch
article.updated_at #=> "Mon Apr 20 07:43:27 -0400 2009"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值