helperとhelper_methodは何をしますか?


201

helper_method 簡単です。コントローラーのメソッドの一部またはすべてをビューで使用できるようにします。

なにhelper?それは逆ですか?つまり、ヘルパーメソッドをファイルまたはモジュールにインポートしますか?(名前helperhelper_method似ているかもしれません。代わりにshare_methods_with_viewand かもしれませんimport_methods_from_view

参照

回答:


295

このメソッドhelper_methodは、コントローラーで定義されたいくつかのメソッドを明示的に共有して、ビューで使用できるようにします。これは、コントローラーとヘルパー/ビューの両方からアクセスする必要があるすべてのメソッドに使用されます(コントローラーでは標準のヘルパーメソッドは使用できません)。たとえば、一般的な使用例:

#application_controller.rb
def current_user
  @current_user ||= User.find_by_id!(session[:user_id])
end
helper_method :current_user

helper一方、このメソッドは、ヘルパー全体をコントローラー(および継承されたコントローラー)によって提供されるビューにインポートするためのものです。これが意味することは

# application_controller.rb
helper :all

Rails> 3.1の場合

# application.rb
config.action_controller.include_all_helpers = true
# This is the default anyway, but worth knowing how to turn it off

すべてのビューですべてのヘルパーモジュールを使用できるようにします(少なくともapplication_controllerから継承するすべてのコントローラーに対して)。

# home_controller.rb
helper UserHelper

UserHelperメソッドを、ホームコントローラーのアクションのビューで使用できるようにします。これは次のことと同じです。

# HomeHelper
include UserHelper

20
Rails> = 3.1では、アプリケーションコントローラーの 'helper:all'は、application.rbの 'include_all_helpers'構成設定に置き換えられます。stackoverflow.com/questions/1179865を参照してください。
Jan Hettich 2013

@ジェレミー私はこの投稿が古いことを知っていますが、よく言われました。助けて頂きました!
Ryan Rebo 2015

3
「ヘルパー」と「インクルード」の使用には、いくつかの単純な構文上のシュガー以外に違いがあります。「ヘルパー」は、指定されたモジュールをビューで使用できるようにします。"include"は、名前付きモジュールをビューとコントローラーで使用できるようにします。どちらも継承されたコントローラーとそのビューに影響を与えます。
Richard_G 2016年

@R_G最後のスニペットinclude UserHelperHomeHelperコントローラーではなくモジュール内にあることに気付きましたか?AFAIKは、ヘルパーモジュールをコントローラーに単に含めるだけでは、メソッドをビューと共有しません。
フランクリンユー

コントローラにヘルパーモジュールを含む@FranklinYuは、実際にメソッドをビューと共有するため、R_Gは正しいです。
Magne、2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.