如何查询存储在数组中的Rails ActiveRecord数据

bdo*_*gie 12 ruby sql postgresql activerecord ruby-on-rails

我有一个rails模型调用MentorData,它有一个名为的属性os_usage.ose存储在这样的数组中['apple', 'linux'].

回顾一下:

$ MentorData.first.os_usage
=> ['apple',  'linux']
Run Code Online (Sandbox Code Playgroud)

我希望能够查询包含os_usage的所有MentorData的数据apple,但是当我搜索时,MentorData.where(os_usage: 'apple')我只会得到只能使用apple而不是apple和linux的导师.我需要以某种方式搜索,检查数组中是否包含apple.

我也试过以下.

MentorData.where('os_usage like ?', 'apple’)
MentorData.where('os_usage contains ?', 'apple’)
MentorData.where('os_usage contains @>ARRAY[?]', 'apple')
Run Code Online (Sandbox Code Playgroud)

是否可以通过具有数组或项的属性在ActiveRecord中查询数据?

如果这有助于提供更原始的搜索查询,则数据库位于Postgres上.

Dav*_*dge 29

以下是当前Rails Edge Guides中给出的示例:

# db/migrate/20140207133952_create_books.rb
create_table :books do |t|
  t.string 'title'
  t.string 'tags', array: true
  t.integer 'ratings', array: true
end
add_index :books, :tags, using: 'gin'
add_index :books, :ratings, using: 'gin'

# app/models/book.rb
class Book < ActiveRecord::Base
end

# Usage
Book.create title: "Brave New World",
            tags: ["fantasy", "fiction"],
            ratings: [4, 5]

## Books for a single tag
Book.where("'fantasy' = ANY (tags)")

## Books for multiple tags
Book.where("tags @> ARRAY[?]::varchar[]", ["fantasy", "fiction"])

## Books with 3 or more ratings
Book.where("array_length(ratings, 1) >= 3")
Run Code Online (Sandbox Code Playgroud)


Zep*_*ock 9

你有没有尝试过MentorData.where("'apple' = ANY (os_usage)")