2010-06-15 7 views
7

que estoy tratando de hacer has_many relación con el atributo dinámico class_nameclass_name dinámica de las relaciones has_many

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

o

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

Pero tengo errores:

can't convert Proc into String 

o

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

EDITAR Tengo dos tipos diferentes de anuncios

LeaseAd, RentAd se implementan utilizando la herencia simple tabla

entonces he Category de los anuncios como conjunto anidado. Me gustaría especificar de forma dinámica qué tipo de anuncios pertenece al objeto Category.

¡Gracias por cualquier ayuda!

+0

La próxima vez, considere pedir soluciones para su problema de raíz. Haría un hábito 'allowed_ad_types' en la Categoría, imponiendo la validación en ese hábito. – pkoch

Respuesta

3
can't convert Proc into String 

medios que esperaban Rails es una cadena

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

significa que no se han definido para la item_typeClass -objeto

Creo que lo que usted quiere aquí no es posible de esta manera.

Me gustaría utilizar algo así como la herencia de singletable para los anuncios y sus subtipos.

+0

Gracias por su respuesta. Entiendo estos errores Acabo de explicar mis enfoques. ¿Hay alguna posibilidad de establecer: el atributo class_name de forma dinámica? – vooD

+0

Como dije, creo que no es posible. Yo usaría la herencia singletable – jigfox

5

Usted puede intentar

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