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' })
参见:
我正在使用 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' })
参见: