Rails和Postgres,由hstore分组

时间:2017-10-10 22:52:19

标签: ruby-on-rails postgresql ruby-on-rails-4 rails-activerecord

我有一个'审计'具有名称的模型:字符串和数据:hstore属性 - 如下所示:

#<Audit 
id: 1, 
name: "my audit", 
data: {"publisher"=>"some publisher",  "display_version"=>"17.012.20098"}, 
created_at: "2017-10-10 13:09:56", 
updated_at: "2017-10-10 13:09:56">

我想生成一个包含3列的报告: name,display_version,count

为了达到这个目的,我假设我需要按照&#34; name&#34;和&#34;数据 - &gt; &#39; display_version&#39;&#34;

我正在努力解决查询和AR语法问题。

到目前为止我所拥有的是:

Parent.audits.group(:name, :data -> 'display_version)'

即使这样也行不通。有人可以帮忙吗?我没有运气就搜索了一些例子。

2 个答案:

答案 0 :(得分:1)

您可以将包含SQL分组表达式的字符串传递给group,这样您就可以说:

Parent.audits.group(%q{name, data -> 'display_version'})

或:

Parent.audits.group(%q{audits.name, audits.data -> 'display_version'})

然后你可以在最后抛出一个#count来获取你想要的数据:

Parent.audits.group(%q{name, data -> 'display_version'}).count

答案 1 :(得分:0)

使用jsonb代替hstore(出于各种原因)

&#39;审计&#39;名称的模型:字符串和数据:jsonb

<强> Audit.rb

store_accessor :data, :publisher, :display_version

然后尝试:

Parent.audits.pluck(:name, :publisher, :display_version)

<强> Good Resource on JSONB and Postgresql

  

hstore列不允许嵌套结构;它们还将所有值存储为字符串,这将需要在数据库和应用程序层上进行类型强制。使用json / jsonb列,您没有这个问题;数字(整数/浮点数),布尔值,数组,字符串和空值被接受,你甚至可以以任何你想要的方式嵌套结构。

     

建议您停止使用hstore而使用jsonb;   请记住,你必须使用PostgreSQL 9.4+来实现这个目的。