ruby Ahoy Top Events By Hash Property

zfciruhq  于 12个月前  发布在  Ruby
关注(0)|答案(1)|浏览(88)

我试图找到一种正确的方法,根据事件中的一个特定属性(“值”)来获取数据库中的前5个事件(按计数)。我还使用了hightop gem来更容易地获取这前5个事件。
如果我用途:

Ahoy::Event.where(time: Date.today.beginning_of_month..Date.today.end_of_month).top(:name, 5)

字符串
这是可行的,但按事件名称排序。我想按事件中的“value”属性排序。下面是一个典型的事件:

<Ahoy::Event id: 229, visit_id: 318, user_id: 1, name: "Thing", properties: {"episode"=>"1", "title"=>"Test", "value"=>"Thing Ep 1: Test"}, time: "2017-11-02 11:34:10">


我试着去做:

Ahoy::Event.where(time: Date.today.beginning_of_month..Date.today.end_of_month).top("properties['value']", 5)


以及:

Ahoy::Event.where(time: Date.today.beginning_of_month..Date.today.end_of_month).top("properties ->> 'value'", 5)


但这会产生以下错误:“不能下标类型文本,因为它不是一个数组”。有没有一种方法可以真正做到我想要的?

jk9hmnmh

jk9hmnmh1#

原因是properties列是一个JSON列,所以使用JSON提取运算符(->>)和Arel.sql()方法来 Package properties->>'value'表达式将是一种方法:

Ahoy::Event.where(time: Date.today.beginning_of_month..Date.today.end_of_month).top(Arel.sql("properties->>'value'"), 5)

字符串

相关问题