如何使用活动记录查询界面编写此查询?

时间:2017-08-14 18:35:10

标签: ruby-on-rails postgresql jsonb

我的products表格中包含jsonb类型specs列。 这个json中的一个关键是brand

我可以成功运行这样的查询:

SELECT specs ->> 'brand' AS brand, COUNT(*) FROM products GROUP BY brand;

   brand    | count
-------------+-------
 Acer        |     9
 Dell        |     4
 XPS 15      |     1
 Apple       |     1
 Lenovo      |     2
 Gigabyte    |     1
 Eluktronics |     5
 Asus        |     2
 HP          |     1

如何使用活动记录查询界面运行此查询?

我尝试过类似的事情:

Product.select("specs ->> 'brand' AS brand").group('brand').count但它不起作用我得到了:

ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  syntax error at or near "AS"
LINE 1: SELECT COUNT(specs ->> 'brand' AS brand) AS count_specs_bran...
                                       ^
: SELECT COUNT(specs ->> 'brand' AS brand) AS count_specs_brand_as_brand, brand AS brand FROM "products" GROUP BY brand
        from (irb):1

1 个答案:

答案 0 :(得分:0)

以下内容应该有效并且更贴近活动记录ORM查询界面:

Product.all.group("specs ->> 'brand'").count

您不应该包含别名AS brand;活动记录将为此提供自己的别名,您可以在尝试此语句后在rails console中查看。