2011-01-11 28 views
1

所以我使用的方法:How to implement an achievement system in RoR在我的应用上实现徽章/成就系统。Rails徽章/成就系统动态主列表

到目前为止,这工作得很好,但我希望有一个网站上当前存在的所有徽章的“主列表”。随着这个不断增加,我希望它能够动态填充自己,而不是我必须手动更新它。

这听起来很容易,但由于成就系统的工作原理(各种类型的徽章都是Achievement.rb模型的所有子类......在db中有许多相同徽章的实例),我不是确定如何能够确定成就模型的所有子类。

此外,我想为每一个徽章都有自己的展示页面(例如网址:http://www.mysite.com/achievements/badge1

所以这个主列表中的徽章图像将是这个样子:

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

然而但是我再也不知道如何遍历Achievement模型的所有子类。

这是否有意义?我应该如何去做这件事?

感谢,

回答

2

要通过子类进行迭代,你应该能够做这样的事情:

#Get the subclasses as class objects 
Achievement.subclasses 

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

再为节目的网址,可能作出这样的成就/路线:徽章',并在你的控制器中,做

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

#or, depending on how you've named everything 
@badge = params[:badge].camelize.constantize.all 
+0

我不认为子类实际上工作,除非子类实例之前遇到(预加载) – bradgonesurfing 2011-07-21 13:24:57