Post Record上的Active Record联合分组查询

时间:2012-08-15 15:50:04

标签: ruby-on-rails ruby postgresql activerecord

我正在研究一个rails项目一段时间,我遇到了(我认为是)一个小问题。

为了简单起见,我有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模型只是让我们知道House的风格百分比。 例如,House可以是70%Modern和30%Classic。

我需要做的是获得所有房屋的每种风格的平均值。 为此,我在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()计算)

提前致谢!

1 个答案:

答案 0 :(得分:0)

您需要创建连接表,使其没有主键。迁移中的create_table语句应如下所示。

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