ActiveRecord:按关系属性分组

时间:2017-03-24 14:26:14

标签: ruby-on-rails activerecord

我有2个型号:

Characteristic
  name

Value 
 characteristic_id
 name

和值belongs_to特征,特征has_many

我希望有一个查询返回features'names作为键和值,这个特征的相关值的名称:

{characteristic_1_name: [value_associated_1.name, value_associated_2.name], characteristic_2_name: [value_associated_3.name, value_associated_4.name]}

我尝试了许多使用连接的查询,选择,但无法使其正常工作。

如果不使用ruby的方法(地图等很慢),我怎么能得到这个结果。

任何输入都将非常感激

1 个答案:

答案 0 :(得分:2)

如果你使用postgresql

ActiveRecord::Base.connection.execute(
    WITH characteristics_arr AS
      (SELECT characteristics.name AS name,
              array_agg(
                        values.id) AS arr
       FROM CHARACTERISTICS
       INNER JOIN
       VALUES ON characteristics.id =
       VALUES.characteristic_id
       GROUP BY characteristics.name)
    SELECT json_object_agg(name, arr)
    FROM characteristics_arr
)