在 jsonb 列中搜索查询
Search query in jsonb column
我有一个 stage
table,它有一个名为 title
的 jsonb
列。
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}%")
}
我有一个 stage
table,它有一个名为 title
的 jsonb
列。
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}%")
}