Ruby on rails 如何为Rails模型组织俱乐部和团队的赛季?

Ruby on rails 如何为Rails模型组织俱乐部和团队的赛季?,ruby-on-rails,database-design,model,Ruby On Rails,Database Design,Model,我有以下情况: 我有一个俱乐部,它可以有几个队,一个队可以有几个球员 然而,一支球队拥有的球员每年都会有所不同。我想知道我怎样才能在图片中添加赛季信息,这样用户就可以在每个赛季添加/删除球员,并且可以看到前几个赛季球队的球员 因此,考虑到以下模型: Club has_many Team Team belongs_to Club Team has_many Players 我将如何使球队拥有更多的球员取决于赛季(2013/2014-2012/2013)有很多方法可以做到这一点。这里有几点是我马上

我有以下情况:

我有一个俱乐部,它可以有几个队,一个队可以有几个球员

然而,一支球队拥有的球员每年都会有所不同。我想知道我怎样才能在图片中添加赛季信息,这样用户就可以在每个赛季添加/删除球员,并且可以看到前几个赛季球队的球员

因此,考虑到以下模型:

Club has_many Team
Team belongs_to Club
Team has_many Players

我将如何使球队拥有更多的球员取决于赛季(2013/2014-2012/2013)

有很多方法可以做到这一点。这里有几点是我马上想到的

  • 在球员模型中添加赛季栏。通过回调将球员的季节属性设置为“创建”。如果是这个季节当前赛季,阻止用户创建、更新或销毁玩家
  • 使用播放器模型中已经提供的更新的_at列来做基本相同的事情。创建一个方法,解析日期时间并将其转换为对您更有用的内容,可能是一个季节编号或类似的内容

  • 有很多方法可以做到这一点。这里有几点是我马上想到的

  • 在球员模型中添加赛季栏。通过回调将球员的季节属性设置为“创建”。如果是这个季节当前赛季,阻止用户创建、更新或销毁玩家
  • 使用播放器模型中已经提供的更新的_at列来做基本相同的事情。创建一个方法,解析日期时间并将其转换为对您更有用的内容,可能是一个季节编号或类似的内容

  • 有两种方法可以做到这一点:

    一个是为
    季节创建另一个关系,并创建三元关系()

    这些表看起来像这样:

        PLAYER(id,...)
        TEAM(id,name,...,club_id)
        SEASON(id,season_name,...)
        SEASON_PARTICIPATION(id,player_id,season_id,team_id)
    
    ActiveRecord关联将是:

        class Club < ActiveRecord::Base
          has_many :teams
        end
    
        class Team < ActiveRecord::Base
          belongs_to :club
          has_many :players, through: :season_participations
        end
    
        class Player < ActiveRecord::Base
          belongs_to :teams, through: :season_participations
        end
    
        class Season < ActiveRecord::Base
          has_many :players, through: :season_participations
        end
    
        class SeasonParticipation < ActiveRecord::Base
          belongs_to :player
          belongs_to :team
          belongs_to :season
        end
    
    class Club
    有关
    ActiveRecord
    关联的更多文档可在此处找到:

    另一种方法是跳过
    季节
    关系,并将其作为
    季节参与
    关系中的一个简单属性。因此,您可以在
    季节参与
    中输入季节名称,而不是
    季节id
    (参见图表)。拥有一个单独的
    季节
    关系可以让您有机会存储有关季节的更多信息,如开始日期/结束日期等。最终,您还可以在另一个关系中添加部门信息


    有两种方法可以做到这一点:

    一个是为
    季节创建另一个关系,并创建三元关系()

    这些表看起来像这样:

        PLAYER(id,...)
        TEAM(id,name,...,club_id)
        SEASON(id,season_name,...)
        SEASON_PARTICIPATION(id,player_id,season_id,team_id)
    
    ActiveRecord关联将是:

        class Club < ActiveRecord::Base
          has_many :teams
        end
    
        class Team < ActiveRecord::Base
          belongs_to :club
          has_many :players, through: :season_participations
        end
    
        class Player < ActiveRecord::Base
          belongs_to :teams, through: :season_participations
        end
    
        class Season < ActiveRecord::Base
          has_many :players, through: :season_participations
        end
    
        class SeasonParticipation < ActiveRecord::Base
          belongs_to :player
          belongs_to :team
          belongs_to :season
        end
    
    class Club
    有关
    ActiveRecord
    关联的更多文档可在此处找到:

    另一种方法是跳过
    季节
    关系,并将其作为
    季节参与
    关系中的一个简单属性。因此,您可以在
    季节参与
    中输入季节名称,而不是
    季节id
    (参见图表)。拥有一个单独的
    季节
    关系可以让您有机会存储有关季节的更多信息,如开始日期/结束日期等。最终,您还可以在另一个关系中添加部门信息


    这是可以的,但是如果你需要保存球员球队/俱乐部的历史记录,你将无法保存。这是可以的,但是如果你需要保存球员球队/俱乐部的历史记录,你将无法保存。