我有一个 Post 模型和一个 View 模型(记录用户对每个帖子的视图),如下所示:
class View < ActiveRecord::Base
belongs_to :user, :class_name => 'User'
belongs_to :post, :class_name => 'Post'
validates_uniqueness_of :user_id, :scope =>:post_id
end
每个帖子都有一个名为“special”的布尔字段。
我想获取具有以下排序条件的所有帖子:
- 如果一个帖子是“特殊的”并且当前用户没有查看(比如 user_id=2),那么它应该出现在结果的顶部,内部按 id 降序排序)。
- 根据帖子的 id 字段对所有其他帖子(非特殊和查看特殊)进行排序。
无法弄清楚我是否以及如何做到这一点。
首先,我尝试了以下查询:
posts = Post.order("(case when special = true then 'special desc, id desc' else 'id desc' end)")
但它的行为方式很有趣:返回顶部的所有特殊帖子,然后是常规帖子,但 id 按升序排序。
我在这里想念什么?另外,如何使用带有如此复杂的 order by 子句的连接(用于视图表)?我试图为此编写一个 SQL,但也在那里苦苦挣扎!给我看点光:)
PS我是Rails的新手,还在学习。