【问题标题】:Rails models with Single Table Inheritance and HABTM具有单表继承和 HABTM 的 Rails 模型
【发布时间】:2015-02-03 15:57:09
【问题描述】:

我有一个包含 2 个模型的项目,游戏和团队。一场比赛有两支球队,一支客队和一支主队。有一定数量的团队(不再创建),每个团队都属于许多游戏。

我希望能够使用@game.home_team.name 而不是@game.teams.find_by_id(@game.home_team_id).first.name。我不确定是否可以在不创建两个额外模型(AwayTeam 和 HomeTeam)的情况下做到这一点,除了额外的 :game_id 和可能的 :type 之外,它们将具有与 Team 相同的列。

目前,Games 和 Teams 之间的 HABTM 关系有效,但一旦 Teams 属于 Game,我无法将其变成 HomeTeam 或 AwayTeam。

game.rb

class Game < ActiveRecord::Base
  has_and_belongs_to_many :teams
  has_one :away_team, -> {where(type:'away')}, class_name: 'Team' 
  has_one :home_team, -> {where(type:'home')}, class_name: 'Team'
end

team.rb

class Team < ActiveRecord::Base

  has_and_belongs_to_many :games
  # has_many :away_teams
  # has_many :home_teams
end

###

# class AwayTeam < Team
#   belongs_to :game
#   belongs_to :team
# end
# class HomeTeam < Team
#   belongs_to :game
#   belongs_to :team
# end

games_controller.rb

def create
  @game = Game.create(game_params)
  @game.teams << Team.find_all_by_id([ @game.away_team_id, @game.home_team_id ])
  @game.away_team = @game.teams.find_by_id(@game.away_team_id)
  @game.home_team = @game.teams.find_by_id(@game.home_team_id)
  @game.save
end

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby relationships single-table-inheritance


    【解决方案1】:

    尝试添加一个额外的模型 GameTeam 并制作 has_many :through 关系

      class GameTeam
        belongs_to :game
        belongs_to :team
        validates :team_type, presence: true
      end
    
      class Game
        has_many :game_teams
        has_may :teams, through: :game_teams
      end
    

    然后您可以制作 game.teams 来获取所有团队。您还可以通过 GameTeam 类型实现获取主队或客队的方法范围

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多