2011-01-11 66 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