1

所以我正在使用以下方法:如何在 RoR中实现成就系统以在我的应用程序上实现徽章/成就系统。

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

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

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

因此,在此主列表中,徽章图像将如下所示:

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

然而,再一次,我不知道如何遍历成就模型的所有子类。

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

谢谢,

4

1 回答 1

2

要遍历子类,您应该能够执行以下操作:

#Get the subclasses as class objects
Achievement.subclasses

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

然后对于显示 URL,可能会创建一个类似“成就/:徽章”的路由,然后在您的控制器中执行

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

#or, depending on how you've named everything
@badge = params[:badge].camelize.constantize.all
于 2011-02-02T20:29:14.600 回答