Pregunta

Así que estoy usando el método en: Cómo implementar un logro sistema en RoR para implementar un sistema de insignias / logro en mi aplicación.

Esto ha funcionado muy bien hasta ahora, pero estoy con ganas de tener una "lista maestra" de todas las insignias que existen actualmente en el sitio. Ya que esto es cada vez mayor, me gustaría que esta lista podría llenar dinámicamente en sí, en lugar de que yo tenga que actualizar a mano.

Esto suena bastante fácil, pero debido a cómo funciona el sistema de logros (los diferentes tipos de insignias son todas las subclases del modelo Achievement.rb ... hay muchos casos de las mismas insignias en el PP) No estoy seguro de cómo ser capaz de determinar todas las subclases de la modelo de Logros.

Además, me gustaría que cada insignia tener su propia página espectáculo (ejemplo url: http: / /www.mysite.com/achievements/badge1 )

Así que dentro de esta lista maestra de las imágenes de distintivos se verá algo como esto:

<%= link_to "#{image_tag @achievement.photo}", achievement_path(@achievement) %>

Sin embargo, una vez más, no tengo idea de la manera de recorrer todas las subclases de la modelo de Logro.

¿Esto tiene sentido? ¿Cómo debo ir haciendo esto?

Gracias,

¿Fue útil?

Solución

Para iterar a través de las subclases, usted debe ser capaz de hacer algo como esto:

#Get the subclasses as class objects
Achievement.subclasses

#Get just the subclass names
Achievement.subclasses.map(&:name)

Y a continuación, para el espectáculo URLs, probablemente, hacer una ruta como 'logros /: insignia' y, en su controlador, haga

@badges = Achievement.where(:type => params[:badge]).all

#or, depending on how you've named everything
@badge = params[:badge].camelize.constantize.all
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top