これが私が持っているものです:
モデルマッチとモデルチームがあります。試合には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_team
1つのクエリのみが必要になります。