我需要一个玩家拥有许多结构和属于玩家的结构。结构是一种多态关系。
class Player < ActiveRecord::Base
has_many :player_structures
has_many :structures, :through => player_structures
end
class PlayerStructures < ActiveRecord::Base
belongs_to :structure, polymorphic: true
belongs_to :player
end
class StructureA < ActiveRecord::Base
has_one :player_structure, :as => :structure
has_one :player, :through => :player_structure
end
class StructureB < ActiveRecord::Base
has_one :player_structure, :as => :structure
has_one :player, :through => :player_structure
end
但是如果我退出Player.first
并询问它的结构,它会给出:
ActiveRecord::HasManyThroughAssociationPolymorphicSourceError: Cannot have a has_many :through association 'Player#structures' on the polymorphic object 'Structure#structure'.
但它应该能够生成一个 SQL 查询,在其中找到所有带有其 id 的 player_structures,然后根据 structure_id 和 structure_type 获取结构。为什么这会失败,我怎样才能有效地构造一个多态连接表?
更新
如果我手动执行我希望它执行的操作,它会起作用:
player_structures.collect(&:structure)
Rails,你不这样做吗?