所以我使用How to implement an achievement system in RoR中的方法在我的应用上实现徽章/成就系统。
到目前为止,这项工作非常有效,但我希望拥有网站上当前存在的所有徽章的“主列表”。随着这种情况不断增加,如果这个列表可以自动填充,我会喜欢它,而不是我必须手动更新它。
这听起来很简单,但是由于成就系统的工作原理(各种类型的徽章都是Achievement.rb模型的子类......数据库中存在许多相同徽章的实例)我不确定如何确定Achievements模型的所有子类。
此外,我希望每个徽章都有自己的展示页面(例如网址:http://www.mysite.com/achievements/badge1)
因此,在此主列表中,徽章图像将如下所示:
<%= link_to "#{image_tag @achievement.photo}", achievement_path(@achievement) %>
然而,再一次,我不知道如何遍历Achievement模型的所有子类。
这有意义吗?我应该怎么做呢?
谢谢,
答案 0 :(得分:2)
要遍历子类,您应该可以执行以下操作:
#Get the subclasses as class objects
Achievement.subclasses
#Get just the subclass names
Achievement.subclasses.map(&:name)
然后对于节目网址,可能会创建一个类似'achievement /:badge'的路线,并在控制器中执行
@badges = Achievement.where(:type => params[:badge]).all
#or, depending on how you've named everything
@badge = params[:badge].camelize.constantize.all