1

私はしばらく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 は使用できません)

前もって感謝します !

4

1 に答える 1

0

主キーを持たないように結合テーブルを作成する必要があります。移行の create_table ステートメントは次のようになります。

create_table :houses_style_relationships, :id => false do |t|
于 2012-08-15T18:47:24.577 に答える