2012-02-27 7 views
10

Digamos que deseo hacer una página que pueda consultar el objeto deseado con tipo (cadena) e identificación (int).Referenciando el modelo con la entrada de cadena

/consulta? Type = personas & id = 1

mí se vendería

Person.find (1)

mientras que

/What ry? type = ciudades & id = 123

sería buscarme

City.find (123)

Sin embargo, no tengo problemas en cuanto a cómo traducir cadenas en el deseado clase modelo

La única manera que puedo pensar es

case params[:type] 
when 'people' 
    @object = Person.find(params[:id]) 
when 'cities' 
    @object = City.find(params[:id]) 
end 

Sin embargo, este método será bastante problemático si tengo más tipos de modelos.

¿Hay una manera mejor?

gracias de antemano,

+3

Si intenta hacer esto de forma automática puede terminar en una situación en la que un atacante puede enviar "/query? type = TOP_SECRET_TABLE & id = 1 "y obtener información a la que no debería tener acceso. Ten cuidado con lo que deseas. – Sebi

+0

En realidad está diseñado para ajax para etiquetar objetos. Entonces mi próximo paso sería como @ object.tags << tag. Pero quería mantener la pregunta simple, así que se lo pregunté de esta manera. ¡Gracias de todos modos! – rickypai

Respuesta

37

Probar:

klass = params[:type] 
klass.singularize.classify.constantize.find(params[:id]) 

Editar:

@object = params[:type].singularize.classify.constantize.find(params[:id]) 
+0

Su código no funciona de la caja, pero lo edité y ¡ahora funciona! ¡Muchas gracias! – rickypai

+0

Sí, un error tipográfico a 'klass', gracias. –

Cuestiones relacionadas