在Rails中将结果查询到JSON中

时间:2017-10-26 15:06:42

标签: ruby-on-rails json

我想存储以下查询的查询结果

"SELECT sum( CASE WHEN properties like '%abcd%' THEN 1 ELSE 0 END) 'abcd',
        sum( CASE WHEN properties like '%gef%' THEN 1 ELSE 0 END) 'gef',
        sum( CASE WHEN properties like '%hij%' THEN 1 ELSE 0 END) 'hij',
        sum( CASE WHEN properties like '%lmn%' THEN 1 ELSE 0 END) 'lmn' from events"

作为表单中的JSON

{'abcd': 1, 'gef' : 2, 'hij' : 1, 'lmn' : 3} 
在Rails中

我使用的count_result = ActiveRecord::Base.connection.execute(sql)只返回值,而不是键。 我以[1,2,1,3]格式得到结果。

如何获取键值并将它们存储为json格式?

1 个答案:

答案 0 :(得分:1)

使用ActiveRecord::Base.connection.exec_query获取可以转换为哈希的ActiveRecord::Result对象:

result = ActiveRecord::Base.connection.exec_query("SELECT sum( CASE WHEN properties like '%abcd%' THEN 1 ELSE 0 END) 'abcd',
        sum( CASE WHEN properties like '%gef%' THEN 1 ELSE 0 END) 'gef',
        sum( CASE WHEN properties like '%hij%' THEN 1 ELSE 0 END) 'hij',
        sum( CASE WHEN properties like '%lmn%' THEN 1 ELSE 0 END) 'lmn' from events")

result.to_h # => { 'abcd' => 1, 'hij' => 0 ... }

要将值转换为JSON字符串,只需在哈希上调用.to_json即可。但是,如果您使用的是本机JSON列类型,则无需手动转换它。