Rails关联 - 与同一个类的多个has_one关系

Rya*_*tes 5 ruby activerecord ruby-on-rails-3

我的问题的一个例子是体育比赛.体育游戏有两个团队,一个主队和一个客队.我的活跃记录模型如下:

class Team < ActiveRecord::Base

  belongs_to :game

end

class Game < ActiveRecord::Base

  has_one :home_team, :class_name => "Team"
  has_one :away_team, :class_name => "Team"

end
Run Code Online (Sandbox Code Playgroud)

我希望能够通过游戏访问团队,例如:Game.find(1).home_team

但是我得到了一个统一的常数错误:Game :: team.谁能告诉我我做错了什么?谢谢,

tyb*_*103 7

如果Game has_one :team那么Rails假设你的团队表有一个game_id列.你想要的是游戏桌上有一个team_id列,在这种情况下你可以使用Game belongs_to :team.作为英语,在这种情况下它听起来倒退,但作为Ruby,它是正确的.

我做了一点简化.你想要的东西是这样的:

class Team < ActiveRecord::Base
  has_many :home_games, :class_name => "Game", :foreign_key => 'home_team_id'
  has_many :away_games, :class_name => "Game", :foreign_key => 'away_team_id'
end

class Game < ActiveRecord::Base
  belongs_to :home_team, :class_name => "Team"
  belongs_to :away_team, :class_name => "Team"
end
Run Code Online (Sandbox Code Playgroud)


CDu*_*Dub 0

听起来像是命名空间问题。尝试为团队显式声明类(带有命名空间)。例如:

has_one :home_team, :class_name => "::Team"
Run Code Online (Sandbox Code Playgroud)

http://guides.rubyonrails.org/association_basics.html#the-has_one-association