1

だから私はメソッドを使用しています:アプリにバッジ/アチーブメント システムを実装するために RoR にアチーブメント システムを実装する方法。

これはこれまでのところうまく機能していますが、現在サイトに存在するすべてのバッジの「マスター リスト」が必要です。これは増え続けているため、手動で更新するのではなく、このリストが動的に入力されるようになれば幸いです。

これは非常に簡単に聞こえますが、アチーブメント システムの仕組み (さまざまな種類のバッジはすべて Achievement.rb モデルのサブクラスです... データベースには同じバッジのインスタンスが多数あります) のため、どうすればよいかわかりません。実績モデルのすべてのサブクラスを決定できます。

さらに、バッジごとに独自のショー ページを作成したいと考えています (URL の例: http://www.mysite.com/achievements/badge1 ) 。

したがって、このマスター リスト内のバッジ イメージは次のようになります。

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

ただし、やはり、Achievement モデルのすべてのサブクラスを反復処理する方法がわかりません。

これは理にかなっていますか?これを行うにはどうすればよいですか?

ありがとう、

4

1 に答える 1

2

サブクラスを反復処理するには、次のようにする必要があります。

#Get the subclasses as class objects
Achievement.subclasses

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

そして、ショーの URL については、おそらく 'achievements/:badge' のようなルートを作成し、コントローラーで次のようにします。

@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 に答える