ActiveRecord имеет две ассоциации - PullRequest
5 голосов
/ 28 ноября 2010

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

У меня есть модели команд и игр.Каждая команда будет иметь множество игр @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

Я бы хотел что-то подобное, но, очевидно, это не так, как работает

class Team < ActiveRecord::Base
  has_many :games
end

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

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

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

1 Ответ

3 голосов
/ 28 ноября 2010

Возможно, вы все еще можете смоделировать его с помощью ассоциаций bt / ho и настроить игры как метод доступа в команде, а не как ассоциацию:

class Team < ActiveRecord::Base
  def games
    Game.find(:conditions => ["home_team_id = ? OR away_team_id = ?", id, id])
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...