困难的Rails ActiveModel查询

时间:2015-05-01 07:14:53

标签: mysql ruby-on-rails

我正在构建一个具有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语法错误。任何想法如何实现这一目标?

非常感谢

2 个答案:

答案 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