我有一个模型用户,即 has_many user_entitlements。我想要获取所有具有预览属性但没有用户权利的用户。
我的代码当前是:
User.where("preview is not null").keep_if {|user| user.user_entitlements.empty?}
这将遍历所有用户并查看他们是否具有任何用户权利。
有没有一种方法可以在 SQL 中执行此操作,以提高效率并避免遍历每个用户?
最佳答案
您可以使用 Arel 来利用 NOT EXISTS
构建查询。
user_arel = User.arel_table
ue_arel = UserEntitlement.arel_table
User.where("preview is not null").where(
UserEntitlement.where(ue_arel[:user_id].eq(user_arel[:id])).exists.not
)
我对您的架构做出假设,即 UserEntitlement
包含 user_id
列。
关于mysql - Rails 高级 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16322120/