【发布时间】:2018-10-01 19:16:28
【问题描述】:
在 Rails 4 项目中,我有 articles 和 has_many comments。
我试图在一篇按评论score(评论表中的整数列)排序的文章下显示一个 cmets 列表,但其中 首先显示来自少数用户的 cmets(例如管理员和模组)。这些用户将作为 user_ids 数组传递给查询(user_id 也是评论表中的一列):
class Comment < ActiveRecord::Base
# article_id :integer
# user_id :integer
# score :integer
belongs_to :article
belongs_to :user
scope :by_users, -> (user_ids) { order("user_id IN (?), score DESC", user_ids) }
因此:
some_article.comments.by_users([1,2,3])
这个范围给出了一个语法错误,我不能很好地计算出一个对 cmets 排序的查询,以便返回所有文章的 cmets,首先显示来自传递数组中的 user_id 的用户,然后再按评论分数排序.
更新:
mahemoff 伟大的条件思想不适用于 Postgres,但导致了这种无效的尝试:
scope :by_users, -> (user_ids) { order("case when (user_id IN (?)) then 0 else 1 end, score DESC", user_ids) }
这给了我一个与占位符 ? 相关的 PostgreSQL 语法错误,我无法修复。
【问题讨论】:
标签: sql ruby-on-rails postgresql ruby-on-rails-4 activerecord