ビューにコントローラーコードを追加するのは常に悪いことですか?

ruby-on-rails
ビューにコントローラーコードを追加するのは常に悪いことですか?

一般的に、ビューにコントローラーコードを含めるのは良い考えではないことを知っています。 ただし、これが完全に真実ではない場合はありますか? たとえば、この例はどうですか:

<%= link_to "Upgrade (costs #{ Skill.get_profession_cost('Admin')} gold)" ...

この例では、複数のロール(管理者、ユーザーなど)の職業コストを取得する必要があります。 したがって、上記のような多くのリンクがあります。 ここで問題となるのは、それを行うためのベストプラクティスです。 私は3つの方法を考えることができます:

  1. 上記のように。

  2. ヘルパーを使用してコストを取得します(欠点-必要です
    とにかく、モデルでget_profession_cost関数を使用します。コントローラーで使用するためです。したがって、ヘルパーは私にとって少し冗長なようです)。 さらに、とにかくコントローラーにあるべきコードとしてヘルパーをちょっと考えます。

  3. 次のような事前に設定されたハッシュを取得します。

ユーザー⇒ 1000、管理者⇒ 3000 …​ もっと。 ただし、これはより面倒で、作成するのは面倒です。

あなたの意見が本当に欲しいです。 より良い方法はありますか?そうでない場合は、どちらを好むでしょうか?

  2  0


ベストアンサー

優先順位は常に

  1. モデル

  2. ヘルパー

  3. コントローラ

  4. View

モデルにメソッドがあると便利です。 さらに一歩進んで、すべての職業コストのハッシュを取得するクラスメソッドをモデルに追加するとします。 これの利点は、職業ごとに1つではなく、おそらく1つのDBクエリ(キャッシュされる)を実行できることです。 コントローラーはできるだけ細くしてください。

その後、必要なコントローラーのすべての場所でハッシュを取得できます(または、フィルターを使用して多くの場所に追加できます)。

数字だけでなく文字列を生成するヘルパーを追加します

(costs 12 gold)

それが数回使用されている場合。

5


コントローラー内のすべての計算を含むようにします。

ビューにRubyコードを含める例は次のとおりです。

- if boolean_2
    % some_html
-if boolean_2
    % other_html

(Haml構文)

ブール値1と2がコントローラーに設定され、ビューは結果を使用するだけです。

もちろん、上記の例のような少量のコードでは、おそらく問題ではありません。 通常、コントローラーで可能な限り多くのメソッド呼び出しを保持し、ビューとコントローラーの間でハッシュを渡します。

私の意見です。

0


タイトルとURLをコピーしました