我目前有这个代码:
class Group < ActiveRecord::Base
has_many :roles
#can't find better name for this method
def self.without_role_ids
find_by_sql('select id from groups where id not in
(select distinct group_id from roles)').map { |g| g.id }
end
end
class Role < ActiveRecord::Base
belongs_to :group
end
without_role_ids
方法输出没有任何角色的组的 ID。
我想要做的是重写这个方法:
def self.without_role_ids
where("id NOT IN (?)", Role.pluck(:group_id))
end
它产生两个查询。
可以运行
where(id: Role.select(:group_id))
它将只产生一个 SQL 查询,但我需要的IN
不是它。NOT IN
是否可以在NOT IN
不使用 find_by_sql 的情况下处理一个查询?