0
  • 我有一个可以链接到许多结构的人(结构是多态的)
  • 我有一个场地,可以有很多人,作为一个结构。
  • 我有一个日志,它可以有很多人,作为一个结构。

这是我的建模:

class Venue < ActiveRecord::Base
  has_many :structure_people, :as => :structure
  has_many :people, :through => :structure_people
end

class Journal < ActiveRecord::Base
  has_many :structure_people, :as => :structure
  has_many :people, :through => :structure_people
end

class Person < ActiveRecord::Base
  has_many :structure_people
  has_many :structures, :through => :structure_people
end

class StructurePerson < ActiveRecord::Base
  belongs_to :structure, polymorphic: true
  belongs_to :person
end

我的问题 :

  • 当我试图让人们在场地或期刊上时,它会起作用。凉爽的 :)

  • 当我尝试在一个人身上获取结构时,我遇到了一个错误:

    ActiveRecord::HasManyThroughAssociationPolymorphicSourceError: 不能有一个 has_many:通过多态对象“Structure#structure”上的关联“Person#structures”。

任何人都可以帮我解决这个问题吗?

非常感谢。

克里斯托夫

4

1 回答 1

0

我认为这是 Rails 的限制,因为 has_many 关联会自动猜测一个 class_name。但是多态关联可能会返回多个class_name。你介意用这个吗:

class Person < ActiveRecord::Base
  has_many :structure_people
  has_many :venues, :through => :structure_people
  #Journal is the same.
end

class StructurePerson < ActiveRecord::Base
  belongs_to :structure, polymorphic: true
  belongs_to :venue, :foreign_key => 'structure_id', :conditions => {:structure_type => 'Venue'}
  belongs_to :person
end

虽然这是一个丑陋的解决方案......

我认为你可以选择另一种方式。

class Person < ActiveRecord::Base
  has_many :structure_people

  def structures
    structure_people.map(&:structure)
  end
end

你不能得到has_many的链接函数,但是你可以得到多态结构:)

于 2013-08-24T07:32:49.873 回答