我在 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 模型只是让我们知道一个房子的风格百分比。例如,房子可以是 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() 计算)
提前致谢 !