如何访问ActiveRecord哈希列

时间:2016-05-06 22:00:11

标签: ruby-on-rails ruby activerecord

如何通过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")

2 个答案:

答案 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”)