2010-06-15 15 views
7

Dinamik class_name özniteliği ile Has_many ilişkisi yapmaya çalışıyorumDinamik class_name

class Category < ActiveRecord::Base 
    has_many :ads, :class_name => (lambda { return self.item_type }) 
end 

veya

class Category < ActiveRecord::Base 
    has_many :ads, :class_name => self.item_type 
end 

Ama hataları var:

can't convert Proc into String 

veya

undefined method `item_type' for #<Class:0xb62c6c88> 
Ben Reklamlar iki farklı türde

LeaseAd sahip

DÜZENLEME, RentAd onlar Sonra ben iç içe kümesi olarak reklamların Category sahip tek tablo devralma

kullanılarak uygulanır. Hangi tür reklamların Category nesnesine ait olduğunu bilerek belirtmek isterim.

Yardımlarınız için teşekkür ederiz! raylar

+0

Sonraki zaman deneyebilirsiniz. Kategori’de bir 'allowed_ad_types' habtm’i yapardım ve bu hükmün onaylanmasını zorluyordum. – pkoch

cevap

3
can't convert Proc into String 

vasıta

undefined method `item_type' for #<Class:0xb62c6c88> 

sana burada ne istiyor bu şekilde mümkün değildir inanıyoruz Class -Nesne

için item_type tanımlamak olmadığı anlamına gelen bir dize bekliyor.

Reklamlar ve alt türleri için tekil kalıtım gibi bir şey kullanırdım.

+0

Cevabınız için teşekkür ederiz. Bu hataları anlıyorum. Yaklaşımlarımı açıkladım. Class_name özniteliğini dinamik olarak ayarlama şansınız var mı? – vooD

+0

Dediğim gibi, bunun mümkün olmadığına inanıyorum. Singletable kalıtım kullanırdım – jigfox

5

Sen kök sorununa çözüm soran düşünün

def items 
    item_type.constantize.where(category_id: id) 
end