2012-01-01 7 views
1

私はSTIサブクラスを使用しています。サブクラスごとに異なるビューを表示したいとします。現時点では私はこのようなメインクラスの記事をサブクラストピックをルーティングしています:サブクラスのビューが異なります

resources :topics, :controller => 'articles' 

は異なるビューに指示するための簡単な方法はありますか?


編集

私はこれを行うための見つけた最良の方法は次のとおりです。

<% case%> 
    <% when @article.type == 'Topic' %> 
     <%= render 'topic' %> 
    <% else %> 
     <%= render 'article' %> 
    <% end %> 

答えて

1

あなたがスマートに十分なご意見に名前を付ける場合は、あなただけの

​​

を行うことができますまたは

render :partial => @article.type 

そうでなければ、表示される部分/ページの名前を返すすべてのSTIサブクラスにメソッドを定義することができます。コントローラのif/elseロジックをすべて避けることができます。

別のアプローチは、異なるサブクラス用に別々のコントローラを用意することですが、それは良い設計ではありません。あなたがこのような道を踏み出すのであれば、おそらくSTIは最良のアプローチではないかもしれません。

+0

'type'はクラス名になります。ビューは通常小文字のアンダースコアで表示されるので、' render @ article.type.underscore'は '@ article.type'よりも良い選択です。 –

+0

ありがとうございます - 最初の方法は非常に賢いです、私はおそらく使用するでしょう。しかし、あなたは私にあなたの第2の方法のための例や指針を与えることができますか?私はそのような方法をどのように書くのでしょうか? – Edward

+0

ミューのおかげです。 – Edward

関連する問題