2010-11-28 8 views
5

Каков наилучший способ достижения двух связей с activerecord?ActiveRecord имеет две ассоциации:

У меня есть модели Team и Game. Каждая команда будет иметь несколько игр @team.games. В игре будут две команды @game.hosting_team и @game.opposing_team.

Я начал с двух ассоциаций belongs_to/has_one, но затем @team.games вернул бы свои домашние игры.

Другой вариант, о котором я могу думать, - использовать HABTM и использовать валидатор для обеспечения наличия только записей. Единственное, чего не хватает, это следить за ходом команды. Мне кажется, что мне нужно много общения, но я не совсем уверен ...

Спасибо за помощь.

Это пример того, как выглядят две ассоциации has_many. Проблема здесь в том, что я должен был бы назвать team.games и team.opponents, чтобы получить полный список своих игр

class Team < ActiveRecord::Base 
    has_many :games 
    has_many :opponents, :class_name => "Team"#, :foreign_key => "" 
end 

class Game < ActiveRecord::Base 
    belongs_to :team, :class_name => "Team" #, :foreign_key => "team_id" 
    belongs_to :opponent, :class_name => "Team" #, :foreign_key => "opponent_id" 
end 

я хотел бы что-то вроде этого, но это, очевидно, не так, как belongs_to работ.

class Team < ActiveRecord::Base 
    has_many :games 
end 

class Game < ActiveRecord::Base 
    belongs_to :hosting_team 
    belongs_to :opposing_team 
end 

Мой желаемый ави будет выглядеть следующим образом.

@team.games # return all games home or away 
@game.hosting_team # Team 
@game.opposing_team # Team 
+0

Вы можете calrify отношение от модели и возможно, разместите свой db/schema.rb? – 2010-11-28 19:48:44

+0

Спасибо. Я редактировал вопрос. – jspooner 2010-11-28 20:13:36

ответ

3

Вы можете, вероятно, до сих пор модель его с Bt/хи ассоциациями, а также создать игры как метод аксессора по команде, а не в качестве ассоциации:

class Team < ActiveRecord::Base 
    def games 
    Game.find(:conditions => ["home_team_id = ? OR away_team_id = ?", id, id]) 
    end 
end