1

これが私が持っているものです:

モデルマッチとモデルチームがあります。試合にはhome_teamとaway_teamがあります。実際、それは2:nの関係です。

class Team < ActiveRecord::Base
 has_many :home_matches, :class_name => 'Match', :foreign_key => 'home_team_id'
 has_many :away_matches, :class_name => 'Match', :foreign_key => 'away_team_id'

 public
 def matches
   return home_matches + away_matches
 end
end

class Match < ActiveRecord::Base
 attr_accessible :away_team_id, :home_team_id
 belongs_to :home_team, :class_name => 'Team', :foreign_key => 'home_team_id'
 belongs_to :away_team, :class_name => 'Team', :foreign_key => 'away_team_id'

終わり

事実上、Team.find(2).matchesを呼び出して、すべてのアウェイマッチとホームマッチを取得できるようになりました。しかし、私が気に入らないのは、1つではなく2つのSQLクエリが必要なことです

SELECT `matches`.* FROM `matches` WHERE `matches`.`home_team_id` = 2
SELECT `matches`.* FROM `matches` WHERE `matches`.`away_team_id` = 2

Railsにこのクエリを使用させるにはどうすればよいですか?

  SELECT `matches`.* FROM `matches` WHERE `matches`.`home_team_id` = 2 OR `matches`.`away_team_id` = 2

逆の場合も同じ頭痛の種になります。teamマージするメソッドを定義し、DBに2回クエリを実行するhome_teamと、away_team1つのクエリのみが必要になります。

4

1 に答える 1

3
def matches
    Match.where("home_team_id = ? OR away_team_id = ?", id)
end

また、Matchモデルではこれらの外部キーは必要ありません。これらの属性はMatchモデル自体に含まれているため、外部ではありません。

于 2012-06-25T22:05:48.990 に答える