いくつかの質問:
ヘルパーモジュール(アプリケーションヘルパーなど)でコントローラーメソッドを呼び出すことはできますか?
もしそうなら、ヘルパーはビューのレンダリングをどのように処理しますか?それを無視します?
どのような場合に、ヘルパーからコントローラーメソッドを呼び出しますか?それは悪い習慣ですか?
ヘルパーでコントローラーメソッドを呼び出しているサンプルコードはありますか?
いくつかの質問:
ヘルパーモジュール(アプリケーションヘルパーなど)でコントローラーメソッドを呼び出すことはできますか?
もしそうなら、ヘルパーはビューのレンダリングをどのように処理しますか?それを無視します?
どのような場合に、ヘルパーからコントローラーメソッドを呼び出しますか?それは悪い習慣ですか?
ヘルパーでコントローラーメソッドを呼び出しているサンプルコードはありますか?
通常、ヘルパーからコントローラーメソッドを呼び出すことはありません。つまり、データを収集してからビューをレンダリングするメソッドを意味する場合(呼び出す必要のある他のメソッドは、おそらくコントローラーに存在しないはずです)。これは間違いなく悪い習慣であり、MVCを破ります。
ただし、ビューでコントローラーメソッドを使用できるようにすることは完全に可能です。たとえば、current_user
メソッドが優れた例です。
ビューでコントローラーメソッドを使用できるようにするには、ヘルパーメソッドとして次のようにします。
private
def current_user
# do something sensible here
@current_user ||= session[:user]
end
helper_method :current_user
このようなメソッドは、private
セクションで最もよく定義されているか、アクションとして使用できる可能性があります(ルーティングでワイルドカードを使用している場合)。
対応するコントローラーでメソッドを宣言します
private
def method_name1
...
end
def method_name2
...
end
コントローラーの頭で宣言する
helper_method :method_name1, :method_name2
これらのメソッドをプライベート状態で宣言することをお勧めします
これで、ヘルパーでメソッドを使用できるようになりました。
ヘルパーからコントローラーを呼び出すと、MVCパターンに違反します。IMOの場合、Railsビューヘルパー(などapplication_helper
)からコントローラーを呼び出す必要がある場合は、設計について改善できることがあります。意図は、ヘルパーがビューを「助ける」ことであり、したがってモデルとのみ話すことです。
ここではMVC自体を防御するつもりはありませんが(Webには大量の参照があります)、ビューからコントローラーを呼び出すことに関するこのSOスレッドで開始できます。
ビューからコントローラーを呼び出していますか?(これはASP.NETスレッドであるため、高レベルの原則のみが関係することに注意してください)。