我有两个模特游戏和团队:
class Game < ActiveRecord::Base
belongs_to :home_team, class_name: 'Team', required: true
belongs_to :visitor_team, class_name: 'Team', required: true
end
和
class Team < ActiveRecord::Base
has_many :games
end
关系has_many:游戏不起作用(我必须指定class_name,但在这种情况下我有两个类名)。我必须区分家庭和访客。
关于如何设计这个的任何想法?
由于
答案 0 :(得分:0)
您必须指定foreign_key
,假设home_team_id
表中有visitor_team_id
和games
列:
has_many :home_games, class_name: 'Game', foreign_key: :home_team_id
has_many :visitor_games, class_name: 'Game', foreign_key: :visitor_team_id
答案 1 :(得分:0)
has_many
会查找与您正在使用的班级同名的外键。
在这种情况下,Rails会假设关联的team_id
类中有一个Game
,链接回团队。但情况并非如此,因此您需要更加明确
在这种情况下,您还没有从游戏回到团队的单个链接。 Game和Team之间有两个不同的链接,因此您需要将这两个链接表示为关联:
class Team < ActiveRecord::Base
has_many :home_games, class_name: 'Game', foreign_key: :home_team_id
has_many :visitor_games, class_name: 'Game', foreign_key: :visitor_team_id
end
如果您希望获得特定团队的所有游戏,无论他们是家庭游戏还是访问游戏,您都可以定义一种方法:
class Team < ActiveRecord::Base
has_many :home_games, class_name: 'Game', foreign_key: :home_team_id
has_many :visitor_games, class_name: 'Game', foreign_key: :visitor_team_id
def games
Game.where('home_team_id = ? or visitor_team_id = ?', id, id)
end
end