Rails Badge / Achievements系统动态主列表

时间:2011-01-11 20:28:48

标签: ruby-on-rails model badge achievements

所以我使用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模型的所有子类。

这有意义吗?我应该怎么做呢?

谢谢,

1 个答案:

答案 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