2012-08-15 48 views
1

我在一個rails項目上工作了一段時間,我遇到了(我認爲是)一個小問題。PostgreSQL上的活動記錄加入分組查詢

爲簡單起見,我有3個模式是這樣的:

class House < ActiveRecord::Base 
    has_many :house_style_relationships 
end 

class HouseStyleRelationship < ActiveRecord::Base 
    attr_accessible :percentage 

    belongs_to :style 
    belongs_to :house 
end 

class Style < ActiveRecord::Base 
    has_many :house_style_relationships 
end 

所以HouseStyleRelationship模型只是讓我們知道一個家的風格百分比。例如,一座房子可以是70%的現代和30%的經典。

我需要做的是獲得所有房屋的每種風格的平均值。 要做到這一點我使用的SQLite在這方面的工作查詢:

houses_count = Houses.count 
HouseStyleRelationship.joins(:style).select("style.name, SUM(house_style_relationships.percentage)/#{houses_count} as percentage").group("styles.id") 

但是,當我決定推動在Heroku所有這些東西,我有一個問題在PostgreSQL。 事實上,要創建一個HouseStyleRelationship對象(我甚至不需要),ActiveRecord會要求一個HouseStyleRelationship.id,它會使Group By崩潰(使用查詢)。 (PostgreSQL不希望用不同的ID對記錄進行分組)

您是否有解決方案阻止ActiveRecord生成模型實例作爲答案並從查詢中刪除HouseStyleRelationship.id? (我不能使用SELECT DISTINCT,因爲我需要SUM()計算)

在此先感謝!

+0

感謝您的詳細問題。將來,請嘗試包含您的PostgreSQL版本以及您獲得的任何錯誤消息的確切文本。 – 2012-08-16 00:16:59

回答

0

您需要創建連接表,使其沒有主鍵。您的遷移中的create_table語句應該看起來像這樣。

create_table :houses_style_relationships, :id => false do |t| 
+0

我想就是這樣! 我修改了我的模型,使其符合您告訴我使用的未識別關係。 接下來我在查詢中改變了一些小東西,它起作用了! 謝謝! – Trivane 2012-08-15 20:29:15