find_by() 在 json 数据中

find_by() in json data

我正在使用 ahoy gem 进行分析。在 ahoy_events table 中,我有 json 数据类型的 properties 列。我想根据该列查找特定数据。

假设我有

{"tag":"a","class":"bigyapan-6","page":"/client/dashboard","text":"","href":"http://www.google.com"}

这是数据,我想 find_by class。

rails c 我 运行 Ahoy::Event.find_by(properties[:class]: "bigyapan-6") 它给了我一个错误

Ahoy::Event.find_by(properties["class"]: "bigyapan-6")
SyntaxError: unexpected ')', expecting end-of-input

尝试以下操作:

Ahoy::Event.find_by properties["class"].to_sym 'bigyapan-6'

我认为它与后面跟有 :

的字符串混淆了

这是一个语法错误,因为 properties[:class] 不是 Ruby 中的有效散列键。要查询 Postgres JSON 列,您需要以字符串形式提供查询:

Ahoy::Event.find_by("properties ->> 'class' = 'bigyapan-6'")

在这种情况下,ActiveRecord 不像关联那样采用嵌套散列。我怀疑 ActiveRecord 是否会支持这一点,因为它非常特定于 RBDMS 并且类型强制(-> vs ->>)会使它变得非常复杂。

# this won't work.
Ahoy::Event.find_by(properties: { class: 'bigyapan-6' })

参见: