mysql - Rails 高级 sql 查询

标签 mysql ruby ruby-on-rails-3 activerecord

我有一个模型用户,即 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/

相关文章:

mysql - 将 varchar 转换为 nvarchar mysql 的问题

mysql - JOIN 字段不等于值的表

ruby-on-rails - :alert does not work; :notice does

ios - 获取 google people profile API 不返回生日和性别键值

ruby-on-rails - 删除 Rails 3 中的 ActiveRecord

php - 需要在 Elgg 中拆分读写

php - 如何在通过php存储在文件夹中时更改图像名称

ruby - 为什么这个 Rails 正则表达式不起作用?

ruby-on-rails - 了解 Rails 3 目录结构

ruby-on-rails - 如何在 Rails 3 中制作自定义助手?