我的问题的一个例子是一个体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的活动记录模型如下:
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我希望能够通过游戏访问一个团队,例如: Game.find(1).home_team
但是我得到了一个单元化的常量错误: Game::team。有人能告诉我我哪里做错了吗?谢谢,
发布于 2013-01-25 03:30:34
如果为Game has_one :team,则Rails假定您的teams表有一个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发布于 2012-01-28 01:35:09
我刚刚测试了你的代码,它应该可以工作。
我怀疑的是你的文件名有误。确保应用程序/模型/中的文件名为:
而不是:
或
发布于 2012-01-28 02:35:39
我认为这可能是你的架构的一个错误。
在这种架构下,游戏不能区分两个团队。
所以,请像这样跑
rails g migration add_stadium_to_game stadium:integer
rails g migration add_home_to_team home:integer
rake db:migrate然后,像这样编辑"game.rb“
class Game < ActiveRecord::Base
has_many :teams
def home_team
teams.select { |team| team.home == self.stadium }.first
end
def away_team
teams.select { |team| team.home != self.stadium }.first
end
end当然,这只是一个例子,所以有很多方法可以实现你的目的。
https://stackoverflow.com/questions/9037340
复制相似问题