2010-06-15 6 views
7

Je suis en train de faire rapport has_many avec attribut nom_classe dynamiquenom_classe dynamique pour les relations has_many

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

ou

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

Mais je suis arrivé erreurs:

can't convert Proc into String 

ou

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

EDIT J'ai deux différents types d'annonces

LeaseAd, RentAd ils ont mis en œuvre en utilisant l'héritage de table unique

Alors j'ai Category des annonces comme ensemble imbriqué. Je voudrais spécifier dinamicly quel type d'annonces appartient à Category objet.

Nous vous remercions de votre aide!

+0

La prochaine fois, envisager de demander des solutions à votre problème racine. Je voudrais faire un habtm 'allowed_ad_types' dans la catégorie, en appliquant la validation sur ce habtm. – pkoch

Répondre

3
can't convert Proc into String 

signifie que rails attend une chaîne

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

signifie que vous n'avez pas défini item_type pour le Class -object

Je crois que ce que vous voulez ici n'est pas possible de cette façon.

Je voudrais utiliser quelque chose comme l'héritage singletable pour les annonces et ses sous-types.

+0

Merci pour votre réponse. Je comprends ces erreurs. Je viens d'expliquer mes approches. Est-il possible de définir l'attribut: class_name de manière dynamique? – vooD

+0

Comme je l'ai dit, je crois que ce n'est pas possible. J'utiliserais l'héritage singletable – jigfox

5

Vous pouvez

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