我很想知道,让我说我有两个模特,讨论和发帖。帖子属于讨论。我在讨论模型中有一个自定义操作,通过检查其最新帖子的创建日期来检查对象的最新活动。即
def latest activity
self.posts.last.created_at || self.created_at
end
我可以编写一个通过此方法命令模型对象的范围,而不是编写讨论模型中的列吗?
scope :latest_activity, #what to put here?
答案 0 :(得分:1)
你有没有想改变父母的原因? Rails有一个内置的方法,称为触摸这个确切的东西。例如:belongs_to:discussion,:touch => :last_reply_at将使得每当更改(创建/更新)时,父级将使用Time.now时间戳更新该字段。这样做的一个好处是,每次想要查看最后一次回复的讨论时,都不会查询孩子。
查看http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
修改强>
另一种方法是在帖子上添加一个过滤器,例如after_create,用讨论模型上的当前时间更新一个字段。