SORU
5 Kasım 2009, PERŞEMBE


ActiveRecord, has_many :ve Dernekler Polimorfik

Millet,

Bu doğru anladığımdan emin olmak istiyorum. Ve lütfen devralma için durum burada () SentientBeing, yerine has_many :ilişkiler uymanız modeller üzerinde çalışırken dikkate almayın. Bu, aşağıdakileri dikkate alın... " dedi

class Widget < ActiveRecord::Base
  has_many :widget_groupings

  has_many :people, :through => :widget_groupings, :source => :person, :conditions => "widget_groupings.grouper_type = 'Person'"
  has_many :aliens, :through => :widget_groupings, :source => :alien, :conditions => "video_groupings.grouper_type = 'Alien'"
end

class Person < ActiveRecord::Base
  has_many :widget_groupings, :as => grouper
  has_many :widgets, :through => :widget_groupings
end

class Alien < ActiveRecord::Base
  has_many :widget_groupings, :as => grouper
  has_many :widgets, :through => :widget_groupings  
end

class WidgetGrouping < ActiveRecord::Base
  belongs_to :widget
  belongs_to :grouper, :polymorphic => true
end

Mükemmel bir dünyada, bir Widget ve bir Kişinin belirli bir şey yapmak istiyorum:

widget.people << my_person

Bunu ancak fark 'türü' '' hep widget_groupings boş. orfoz ... ... Ancak, eğer bir şey için ben aşağıdaki gibi:

widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})

Sonra hepsi normalde beklerdim olarak çalışıyor. Hiç bu polimorfik olmayan dernekler ile meydana gördüm ve sadece eğer bu bir şey kullanma bu davaya özgü olsaydı ya da eğer bir hata bakıyorum eğer potansiyel olarak bilmek istediğini sanmıyorum.

Herhangi bir yardım için teşekkür ederiz!

CEVAP
5 Kasım 2009, PERŞEMBE


Bu işlevi keser known issue Raylar ile bir 3.1.1. Eğer bu sorun ilk olarak yükseltmeyi deneyin yaşıyorsanız, 3.1.2 sabit oldu

Çok yakınsın. Sorun :kaynak seçeneği kötüye gidiyorsun. :kaynak gerekir polimorfik belongs_to ilişkiye işaret eder. Bundan sonra yapmanız gereken tüm :source_type tanımlamak için çalıştığınız ilişki için belirtin.

Widget modeli için bu düzeltmenin tam olarak aradığınız şey yapmak izin vermelidir.

class Widget < ActiveRecord::Base
  has_many :widget_groupings

  has_many :people, :through => :widget_groupings, :source => :grouper, :source_type => 'Person'
  has_many :aliens, :through => :widget_groupings, :source => :grouper, :source_type => 'Alien'
end

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Adams

    Bryan Adams

    30 Mart 2006
  • Digital Bounds

    Digital Boun

    19 Temmuz 2013
  • Jonathan Morrison

    Jonathan Mor

    24 Mart 2010