2

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

假设我有

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

这作为数据,我想 find_by 类。

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

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

2 回答 2

3

这是一个语法错误,因为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' })

看:

于 2016-01-21T01:36:06.367 回答
-1

尝试以下操作:

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

我认为它与字符串混淆,然后是:

于 2016-01-21T01:28:53.783 回答