代码之家  ›  专栏  ›  技术社区  ›  ethyreal

是否可以让多个activeRecord“隶属于”指向同一个类?

  •  2
  • ethyreal  · 技术社区  · 15 年前

    在将一项体育赛事与两支球队联系起来时,起初这似乎是有道理的:

    events
      - id:integer
      - integer:home_team_id
      - integer:away_team_id
    
    teams
      - integer:id
      - string:name
    

    然而,我对如何在活动记录模型中将其联系起来感到困惑:

    class Event
      belongs_to :home_team, :class_name => 'Team', :foreign_key => "home_team_id"
      belongs_to :away_team, :class_name => 'Team', :foreign_key => "away_team_id"
    end
    

    这是最好的解决方案吗?

    在对一个 similar question 我指的是单表继承,后来发现了多态关联。这两个似乎都不适合这个协会。也许我认为这是错误的,但我认为没有必要将一支球队分为主客场球队,因为区别只在于比赛的地点。如果我使用单表继承,我不会希望每个团队都属于某个事件,那么这会起作用吗?

    # app/models/event.rb
    class Event < ActiveRecord::Base
      belongs_to :home_team
      belongs_to :away_team
    end
    
    # app/models/team.rb
    class Team < ActiveRecord::Base
      has_many :teams
    end
    
    # app/models/home_team.rb
    class HomeTeam < Team
    
    end
    
    # app/models/away_team.rb
    class AwayTeam < Team
    
    end
    

    对于我想要实现的目标来说,这似乎是太多的工作了。

    我也考虑过一个有很多通过协会,但这似乎是两个,因为我只需要两个队,但这两个队不属于任何一个事件。

    event_teams
      - integer:event_id
      - integer:team_id
      - boolean:is_home
    

    在活动记录中,是否有更清晰、更语义化的方法来建立这些关联?还是这些解决方案中的一个是最佳选择?

    谢谢

    1 回复  |  直到 13 年前
        1
  •  2
  •   Harish Shetty    15 年前

    您的解决方案很好,因为同一个活动属于两个团队。当多个模型是可能的时,多态关联是适用的。

    推荐文章