我试图在我的has_manyGame模型之间创建一个简单的DLC关联。我面临的挑战是,由于单表继承没有DLC表,所以无法插入game_id。因此,如果我执行以下操作,就会出现此错误:

game = Game.create
game.dlcs

SQLite3::SQLException: no such column: games.game_id

以下是我的模型当前的设置方式:
class Game < ActiveRecord::Base
    has_many :dlcs
end

class DLC < Game
    belongs_to :game
end

注:dlc指downloadable content

最佳答案

最简单的替代方法是使用自连接并将parent_id列添加到games

class Game < ActiveRecord::Base
  has_many :dlcs unless self.name == 'DLC'
end

class DLC < Game
  belongs_to :game, foreign_key: :parent_id
end

如果这是完全不可想象的,您可以创建一个连接表。
# game_id: int
# dlc_id: int
class GameExtension
  belongs_to :game
  belongs_to :dlc
end

class Game < ActiveRecord::Base
  has_many :game_extensions
  has_many :dlcs, though: :game_extensions
end

class DLC < Game
  has_many :game_extensions
  belongs_to :game, though: :game_extensions
end

关于ruby-on-rails - 在has_many关联中使用Rails中的单个表继承模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30949583/

10-12 04:08