我正在构建一个具有User模型的Rails应用程序,通过使用UserInterests连接模型的has_many:through关系加入Interests模型。
鉴于一系列兴趣,我想要做的是找到至少选择了该集合中一个兴趣的所有用户,或者根本没有选择任何兴趣的用户。我想的有点像这样:
users = users.joins(:user_interests).where(["COUNT(user_interests) = 0 OR user_interests.interest_id IN ?", interest_ids])
这会引发Mysql语法错误。任何想法如何实现这一目标?
非常感谢
答案 0 :(得分:0)
尝试这个,
users = User.joins(:user_interests).where("COUNT(user_interests) = 0 OR interest_id IN (?)", interest_ids)
答案 1 :(得分:0)
class User < ActiveRecord::Base
scope :with_interests, ->(*interests) {
joins(:user_interests).where(user_interests: {interest_id: interests.flatten.compact.uniq})
}
scope :no_interests, -> {
where("not exists (select * from user_interests ui2 where ui2.user_id = users.id)")
}
end
interest = Interest.first
User.with_interests(interest) + User.no_interests