0

組我有名字的「審覈」模式:字符串數據:hstore屬性 - 如下:Rails和Postgres的,由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列的報告: 名,display_version,算上

爲了實現這一點,我認爲我需要按「名」和「數據 - >‘display_version’」

我與查詢和AR語法掙扎。

我至今是:

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

即使這是行不通的。有人可以幫忙嗎?我沒有找到任何運氣的例子。

回答

0

使用jsonb而不是hstore(對於各種原因)

'審計' 模型名稱:字符串和數據:jsonb

Audit.rb

store_accessor :data, :publisher, :display_version 

然後嘗試:

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

Good Resource on JSONB and Postgresql

hstore columns don’t allow a nested structure; they also store all values as strings, which will require type coercion on both database and application layers. With json/jsonb columns you don’t have this problem; numbers (integers/float), booleans, arrays, strings and nulls are accepted, and you can even nest structures in any way you want.

The recommendation is that you stop using hstore in favor of jsonb; just remember that you have to use PostgreSQL 9.4+ for this to work.

+0

有用的信息,但它並沒有回答這個問題。 – user3565039

0

您可以通過包含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 
+0

謝謝。這產生:ActiveRecord :: StatementInvalid:PG :: GroupingError:錯誤:列「audits.id」必須出現在GROUP BY子句中或用於聚合函數 – user3565039

+0

對不起,錯過了'count'。我剛剛更新了答案。 –