2017-03-24 24 views
0

我有2种型号:ActiveRecord的:由关系属性组

Characteristic 
    name 

Value 
characteristic_id 
name 

和价值belongs_to特点,特性has_many

我想有一个查询返回characteristics'names作为键和值,相关值的名称,这一特点:

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

我试过很多查询中使用连接,选择,但不能使这项工作。

我怎样才能得到这个结果,而不使用红宝石的方法(地图等是缓慢的)。

任何投入将非常感激

+0

查一查arel_table,我不认为这是可以实现的ActiveRecord – user3033467

回答

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 
)