在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,但这个例子有点琐碎。