8

いくつかの質問:

  1. ヘルパーモジュール(アプリケーションヘルパーなど)でコントローラーメソッドを呼び出すことはできますか?

  2. もしそうなら、ヘルパーはビューのレンダリングをどのように処理しますか?それを無視します?

  3. どのような場合に、ヘルパーからコントローラーメソッドを呼び出しますか?それは悪い習慣ですか?

  4. ヘルパーでコントローラーメソッドを呼び出しているサンプルコードはありますか?

4

3 に答える 3

13

通常、ヘルパーからコントローラーメソッドを呼び出すことはありません。つまり、データを収集してからビューをレンダリングするメソッドを意味する場合(呼び出す必要のある他のメソッドは、おそらくコントローラーに存在しないはずです)。これは間違いなく悪い習慣であり、MVCを破ります。

ただし、ビューでコントローラーメソッドを使用できるようにすることは完全に可能です。たとえば、current_userメソッドが優れた例です。

ビューでコントローラーメソッドを使用できるようにするには、ヘルパーメソッドとして次のようにします。

private

def current_user
  # do something sensible here
  @current_user ||= session[:user] 
end
helper_method :current_user

このようなメソッドは、privateセクションで最もよく定義されているか、アクションとして使用できる可能性があります(ルーティングでワイルドカードを使用している場合)。

于 2010-05-26T07:47:19.393 に答える
10

対応するコントローラーでメソッドを宣言します

private
def method_name1
...
end

def method_name2
...
end

コントローラーの頭で宣言する

helper_method :method_name1, :method_name2

これらのメソッドをプライベート状態で宣言することをお勧めします

これで、ヘルパーでメソッドを使用できるようになりました。

于 2012-11-06T09:06:15.637 に答える
0

ヘルパーからコントローラーを呼び出すと、MVCパターンに違反します。IMOの場合、Railsビューヘルパー(などapplication_helper)からコントローラーを呼び出す必要がある場合は、設計について改善できることがあります。意図は、ヘルパーがビューを「助ける」ことであり、したがってモデルとのみ話すことです。

ここではMVC自体を防御するつもりはありませんが(Webには大量の参照があります)、ビューからコントローラーを呼び出すことに関するこのSOスレッドで開始できます。

ビューからコントローラーを呼び出していますか?(これはASP.NETスレッドであるため、高レベルの原則のみが関係することに注意してください)。

于 2010-05-26T01:28:13.723 に答える