2

ahoy分析にgemを使用しています。ahoy_eventsテーブルには、propertiesjson データ型の列があります。その列に基づいて特定のデータを見つけたい。

私が持っているとしましょう

{"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 に答える