Rails Badge / Réalisations système dynamique Liste maîtresse
-
10-10-2019 - |
Question
Je suis en utilisant la méthode: Comment mettre en œuvre une réalisation système RoR pour mettre en œuvre un badge / système de réalisation sur mon application.
Cela a beaucoup travaillé jusqu'ici, mais je suis désireux d'avoir une « liste maîtresse » de tous les badges qui existent actuellement sur le site. Comme cela augmente sans cesse, je voudrais si cette liste pourrait dynamiquement se remplir, au lieu de me faire mettre à jour manuellement.
Cela semble assez facile, mais à cause de la façon dont je ne suis pas sûr que le fonctionnement du système de réalisations (les différents types de badges sont toutes les sous-classes du modèle Achievement.rb ... il y a de nombreux cas, des mêmes badges dans la db) de la façon d'être en mesure de déterminer toutes les sous-classes du modèle Ambitions.
De plus, je voudrais pour chaque badge d'avoir sa propre page show (exemple url: http: / /www.mysite.com/achievements/badge1 )
au sein de cette liste maître les images de badge ressemblera à quelque chose comme ceci:
<%= link_to "#{image_tag @achievement.photo}", achievement_path(@achievement) %>
Cependant, encore une fois, je ne sais pas comment itérer à travers toutes les sous-classes du modèle de réalisation.
Est-ce que ce sens? Comment dois-je m'y prendre?
Merci,
La solution
Pour itérer à travers les sous-classes, vous devriez être en mesure de faire quelque chose comme ceci:
#Get the subclasses as class objects
Achievement.subclasses
#Get just the subclass names
Achievement.subclasses.map(&:name)
Et puis pour le spectacle URL, sans doute faire une route comme « réalisations /: badge » et, dans votre contrôleur, faites
@badges = Achievement.where(:type => params[:badge]).all
#or, depending on how you've named everything
@badge = params[:badge].camelize.constantize.all