2011-01-11 4 views
1

Поэтому я использую метод в: How to implement an achievement system in RoR для реализации системы значков/достижений в своем приложении.Rails Значок/Достижения Системный динамический мастер-список

Это пока отлично работает, но я хочу иметь «главный список» всех значков, которые в настоящее время существуют на сайте. Поскольку это постоянно растет, мне бы хотелось, чтобы этот список мог динамически заполнить себя, вместо того, чтобы меня вручную обновлять.

Это звучит довольно просто, но из-за того, как работает система достижений (различные типы значков - это все подклассы модели Achievement.rb ... есть много экземпляров одинаковых значков в db) Я не что можно определить все подклассы модели Achievements.

Кроме того, я хотел бы для каждого значка, чтобы иметь свой собственный шоу-страницы (например, URL: http://www.mysite.com/achievements/badge1)

Итак, в этом основной список Бейдж изображения будет выглядеть примерно так:

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

Однако , опять же, я не знаю, как перебирать все подклассы модели достижения.

Имеет ли это смысл? Как мне это сделать?

Спасибо,

ответ

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 
+0

Я не думаю, что подклассы действительно работают, если экземпляр подкласса не был встречен раньше (предварительно загружен) – bradgonesurfing