1

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

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

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

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

4

1 回答 1

1

我不知道如何通过 SQL 来做到这一点,所以我作弊了,我让我的代码在创建主题时设置一个last_post_at属性。

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

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

于 2012-07-17T03:31:29.693 回答