使用ActiveRecord按关联字段排序

时间:2012-07-17 03:26:45

标签: ruby-on-rails activerecord associations

如果关联存在,是否可以编写一个按关联字段排序的ActiveRecord查询,否则按对象本身的属性排序?

示例:我有一个Discussion对象has_many :comments。我想显示按discussion.latest_comment.created_at排序的讨论列表。但是,有些讨论可能没有任何意见,在这种情况下我想使用他们的discussion.created_at属性。

问题是我需要结果为ActiveRecord::Relation(出于性能原因,还因为我们使用的是Kaminari [需要一个Relation对象])。

我唯一能想到的是实际创建一个像discussion.latest_comment_at这样的新字段,该字段最初由discussion.created_at填充,然后在每次发布新评论时更新。但是,从维护的角度来看,这似乎不是很直接(例如,当评论被删除时会发生什么?)。

1 个答案:

答案 0 :(得分:1)

我不知道通过SQL做到这一点的方法,所以我作弊,我的代码set a last_post_at attribute whenever a topic is created

这样,我就可以按last_post_at对主题进行排序,而不必一次查询两个表。

我已经看到其他论坛系统也是这样做的,看起来你正在设计的就是一个类似论坛的系统。