我试图在我的has_many
和Game
模型之间创建一个简单的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/