查找没有HABTM关系的模型或至少具有某个属性的模型

时间:2017-07-17 11:07:39

标签: sql ruby-on-rails activerecord

在Rails 5应用程序中,我有两个通过has_and_belongs_to_many关联关联的模型:

class User < ApplicationRecord
    has_and_belongs_to_many :groups
end

class Group < ApplicationRecord
    has_and_belongs_to_many :users
    scope :public_only, -> { where(public: true) }
end

关联表名为users_groups

我想查找不属于任何群组的用户属于至少一个属性public设置为true的群组。

我可以根据the answer to this question编写单独的范围:

scope :public_only, -> { joins(:groups).where(groups: { public: true }) }
scope :not_in_any_group, -> {
  joins("LEFT JOIN users_groups ON users.id = users_groups.user_id")
  .where("users_groups.user_id IS NULL")
}

但我需要将这些结合起来。所以我尝试了.or

Users.public_only.or(Users.not_in_any_group)

...引发了错误:

ArgumentError: Relation passed to #or must be structurally compatible. Incompatible values: [:joins, :references]

如何组合这两个明显不兼容的查询?我找到了this question,但这个例子有点琐碎。

0 个答案:

没有答案