我可以想象User
并Users
弄乱你的加入。但是请注意,就我的经验而言,这是 Rails 无法很好解决的问题。只是重命名它author
(同时提高可读性/更好地表达意图)将无济于事,因为它仍然指向同一个表users
。
使用 rails 进行多次连接时,很难正确表达您的条件。Rails 会即时为您的表创建别名,不幸的是,在我的情况下,我还没有找到解决这些别名的方法。
因此,我认为您要么必须求助于手工制作的 sql(这将很快),要么使用 rails,并首先按作者姓名排序帖子,然后每秒检索已标记用户的列表(这会更慢,但纯红宝石)。
我会先选择第二个选项,如果需要,我会优化到第一个选项。
[更新:添加范围定义]
就个人而言,我不赞成default_scope
而是建议定义一个明确的范围
scope :with_authors_sorted, lambda {
Post.includes(:type).includes(:user).
order('year DESC, week DESC, users.display_name ASC, posts.created_at DESC')
}
然后您可以在控制器中使用它。
@posts = Post.with_authors_sorted
希望这可以帮助。