【问题标题】:Query where based on the values of a field that is an array根据作为数组的字段的值查询 where
【发布时间】:2017-03-09 18:29:30
【问题描述】:

我有一个类User,它有一个字段permissions,它是一个数组。

t.text  "permissions",  default: [],  array: true

数组permissions 可以包含一个或多个字符串adminguesteditor

如何编写where 查询来检索所有具有特定权限的Users,例如editor?我想在我的控制器中执行此操作。

【问题讨论】:

    标签: ruby-on-rails arrays rails-activerecord


    【解决方案1】:

    假设您使用的是 PostgreSQL,则使用 any:

    9.23.3。任何/某些(数组)

    expression operator ANY (array expression)
    expression operator SOME (array expression)

    右边是一个带括号的表达式,它必须产生一个数组值。使用给定的 operator 计算左侧表达式并与数组的每个元素进行比较,这必须产生布尔结果。

    使用x = any(some_array) 是检查x 是否等于some_array 的任何元素的便捷方法,因此您可以说:

    User.where(':permission = any(permissions)', :permission => your_permission)
    

    您也可以使用overlaps operator (&&)

    User.where('permissions && array[?]', your_permission)
    

    array[...] 语法是在 PostgreSQL 中构建数组字面量的便捷方式,无需过多担心引用问题。

    【讨论】:

      【解决方案2】:

      如果您使用的是 SQL 数据库:

      User.where('permissions like ?', "%editor%")
      

      【讨论】:

      • 我想在我的控制器中执行此操作。
      • 对不起,我已经更新了答案,因为它有一个错误。
      猜你喜欢
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多