私はしばらく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 は Group By を (クエリで) クラッシュさせる HouseStyleRelationship.id を要求します。(PostgreSQL は異なる ID を持つレコードをグループ化したくありません)
ActiveRecord がモデル インスタンスを回答として生成するのを防ぎ、クエリから HouseStyleRelationship.id を削除するソリューションはありますか? (SUM() 計算が必要なため、SELECT DISTINCT は使用できません)
前もって感謝します !