通过rails中的自定义方法排序或范围 - 是否可能?

时间:2011-10-31 03:26:51

标签: ruby-on-rails ruby-on-rails-3 scope

我很想知道,让我说我有两个模特,讨论和发帖。帖子属于讨论。我在讨论模型中有一个自定义操作,通过检查其最新帖子的创建日期来检查对象的最新活动。即

 def latest activity
     self.posts.last.created_at || self.created_at
 end

我可以编写一个通过此方法命令模型对象的范围,而不是编写讨论模型中的列吗?

 scope :latest_activity, #what to put here?

1 个答案:

答案 0 :(得分:1)

你有没有想改变父母的原因? Rails有一个内置的方法,称为触摸这个确切的东西。例如:belongs_to:discussion,:touch => :last_reply_at将使得每当更改(创建/更新)时,父级将使用Time.now时间戳更新该字段。这样做的一个好处是,每次想要查看最后一次回复的讨论时,都不会查询孩子。

查看http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

修改

另一种方法是在帖子上添加一个过滤器,例如after_create,用讨论模型上的当前时间更新一个字段。