質問

だから私は次の方法を使用しています: RORで達成システムを実装する方法 私のアプリにバッジ/功績システムを実装する。

これはこれまでのところうまくいきましたが、現在サイトに存在するすべてのバッジの「マスターリスト」を持ちたいと思っています。これが継続的に増加しているので、このリストが手作業でそれを更新しなければならないのではなく、このリストが動的に自分自身を埋めることができれば、私はそれを望んでいます。

これは非常に簡単に聞こえますが、成果システムの仕組みのために(さまざまなタイプのバッジがすべてAchievement.RBモデルのサブクラスです... DBには同じバッジの多くのインスタンスがあります)達成モデルのすべてのサブクラスを決定できます。

さらに、各バッジに独自のショーページを持っていることを望みます(例URL: http://www.mysite.com/achievements/badge1)

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

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

しかし、繰り返しになりますが、達成モデルのすべてのサブクラスを反復する方法がわかりません。

これは理にかなっていますか?どうすればこれを行う必要がありますか?

ありがとう、

役に立ちましたか?

解決

サブクラスを繰り返すために、次のようなことができるはずです。

#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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top