根据作为数组的字段的值查询位置

时间:2017-03-09 18:29:30

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

假设您正在使用PostgreSQL,则使用any

  

<强> 9.23.3。 ANY / SOME(数组)

     
    

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中构建数组文字的便捷方法,而不必担心过多地引用问题。

答案 1 :(得分:-3)

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

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