在Rails 4项目中,我有articles
has_many comments
。
我正在尝试在评论score
(评论表中的整数列)排序的文章下显示评论列表,但是首先显示来自少数用户的评论(例如,admins& mods)。这些用户将作为user_id数组传递给查询(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])
这个范围给出了语法错误,我无法完成一个命令注释的查询,以便返回所有文章的注释,首先显示来自传递数组中具有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语法错误,这是我无法修复的。
答案 0 :(得分:0)
试试这个:
const obj = {}; //some object
Object.defineProperties(obj,
{
t: { //obj.t
get() {
return obj.t;
},
//here capturing destructive assignment of some object property
set(newT) {
//do something
}
}
});
答案 1 :(得分:0)
使用 mahemoff &amp; mu太短的帮助和建议,这是我的工作范围:
scope :by_users, -> (user_ids) { order([sanitize_sql("case when (user_id IN (#{user_ids.join(',')})) then 0 else 1 end"), "score DESC" ]) }
这有些不完美,因为Rails'order
显然不支持?
占位符,所以我使用了字符串插值(尽管user_ids
不是用户公开的)清理了sql。
...虽然这是一个令人沮丧的问题,是使用.last
来检索最终记录是不可能的。 some_article.by_users[1,2].last
现在抛出一个错误,因为AR无法解决在哪里扭转排序:
ORDER BY case when (user_id IN (1 DESC, 2)) then 0 else 1 end DESC, score ASC LIMIT 1
...叹息