我试图找到一种正确的方法,根据事件中的一个特定属性(“值”)来获取数据库中的前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)
型
但这会产生以下错误:“不能下标类型文本,因为它不是一个数组”。有没有一种方法可以真正做到我想要的?
1条答案
按热度按时间jk9hmnmh1#
原因是
properties
列是一个JSON列,所以使用JSON提取运算符(->>
)和Arel.sql()
方法来 Packageproperties->>'value'
表达式将是一种方法:字符串