has_many: сквозные + полиморфные отношения - PullRequest
4 голосов
/ 07 ноября 2010

Я использую rails3 и пытаюсь создать несколько сложных ассоциаций.

У меня есть модели продукта, версии и свойства.

class Version < ActiveRecord::Base
  belongs_to :product
  has_many :specs
  has_many :properties, :through => :specs
end

class Product < ActiveRecord::Base
  has_many :versions
  has_many :specs
  has_many :properties, :through => :specs
end

class Property < ActiveRecord::Base
end

class Spec < ActiveRecord::Base
  belongs_to :product
  belongs_to :spec
  belongs_to :version
end

Он отлично работает, но я хочу использовать продукт и версию как полиморфные отношения, поэтому в спецификациях таблиц будут только spec_id и some_other_id вместо spec_id, product_id, version_id.

Я не могу понять, куда мне положить: как и где: polymorphic => true. Вы можете мне помочь?

1 Ответ

4 голосов
/ 07 ноября 2010

Как насчет:

class Version < ActiveRecord::Base
  belongs_to :product
  has_many :specs, :as => :speccable
  has_many :properties, :through => :specs
end

class Product < ActiveRecord::Base
  has_many :versions
  has_many :specs, :as => :speccable
  has_many :properties, :through => :specs
end

class Property < ActiveRecord::Base
end

class Spec < ActiveRecord::Base
  belongs_to :speccable, :polymorphic => true
  belongs_to :spec
end
#table: specs(id,spec_id,speccable_type,speccable_id)
...