2017-03-24 26 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 
)