在 jsonb 列中搜索查询

Search query in jsonb column

我有一个 stage table,它有一个名为 titlejsonb 列。

title 的值是一个 ruby hash 值,例如{en: "A", de: "A" }

现在我编写了以下范围,用于根据 Rails 模型中的标题搜索 stage

scope :search, ->(query) { where('title @> ?', { "#{I18n.locale}": "%#{query}%" }.to_json).any? }

但它不起作用,它给了我 RSpec 测试中的所有项目。

您需要使用 ->> JSON 运算符和 ILIKE 来进行模式匹配:

scope :search, ->(query) {
  where("title->>'#{I18n.locale}' ILIKE ?", "%#{query}%")
}