Во-первых, в соответствии с Rails API: has_one определение:
Указывает непосредственную связь с другим классом.Этот метод следует использовать только в том случае, если другой класс содержит внешний ключ.Если текущий класс содержит внешний ключ, тогда вы должны использовать вместо него own_to.См. Также обзор ActiveRecord :: Associations :: ClassMethods о том, когда использовать has_one и когда использовать own_to.
, поэтому в вашем определении Игры следует использовать : assign_to для указания этого типа отношения,
Во-вторых, чтобы указать атрибут, который будет использоваться в отношении, необходимо установить параметр :foreign_key
.
По умолчанию это, как предполагается, имя ассоциации сСуффикс _id.Таким образом, класс, который определяет ассоциацию belongs_to :person
, будет использовать «person_id» в качестве значения по умолчанию :foreign_key
.Точно так же belongs_to :favorite_person, class_name: "Person"
будет использовать внешний ключ «fav_person_id».
Таким образом, в соответствии с документами вы можете сделать:
class Game
belongs_to :hometeam, foreing_key: 'hometeam_id', class_name: 'Team'
belongs_to :awayteam, foreign_key: 'awayteam_id', class_name: 'Team'
end
или подразумеваемую форму:
class Game
belongs_to :hometeam, class_name: 'Team'
belongs_to :awayteam, class_name: 'Team'
end
Тогда каждая команда может иметь много игр:
class Team
has_many :home_games, class_name: 'Game', foreign_key: 'hometeam_id'
has_many :away_games, class_name: 'Game', foreign_key: 'awayteam_id'
end