如何通过rails控制台访问作为哈希的ActiveRecord列?我想获取properties
列。
示例:
=> #<Ahoy::Event:0x007ffde80e3088
id: "abc123def465ghi798j9",
visit_id: "098dca809oiu567hjg678jh",
user_id: 26,
name: "click",
properties:
{"host"=>"localhost/sponsors",
"name"=>"click",
"type"=>"post-to-host",
"value"=>0,
"target"=>"whereintheworldiscarmonsandiego.com/rd/r.php",
"partner"=>"Uber",
"trigger"=>"click",
"utm_source"=>1234567890,
"utm_campaign"=>"organic"},
time: Fri, 06 May 2016 21:42:23 UTC +00:00,
user_type: "Applicant">
我正在尝试:
半/伪代码
Ahoy::Event.where(properties["type"]: "post-to-host")
答案 0 :(得分:0)
如果这是一个续集风格的数据库..你不能。序列化一个列(使用哈希列)的问题在于你绕过了内在的续集抽象。这意味着您无法通过该列进行搜索(有效)。
您可以将属性分解为关系,也可以执行一些非常糟糕的操作,例如
Ahoy::Event.where('properties LIKE ?', {type: 'post-to-host'})
基本上,发生的事情是该列实际上存储为yaml格式化的字符串,当你在ruby中访问它时,它只是从yaml序列化字符串,所以为了查询它,你有查询它就像一个非常无效的字符串,通常容易出错。
tl; dr不要对要在
上查询的数据使用哈希列(序列化)答案 1 :(得分:0)
在Ahoy中,我们建立了访问json属性的方法。您可以尝试以下语法: 1. Ahoy :: Event.where_properties(类型:“发布到主机”) 2. Ahoy :: Event.where_props(type:“ post-to-host”)