ホーム DoRuby ヘルパの自動読込の抑止方法
ヘルパの自動読込の抑止方法
 

ヘルパの自動読込の抑止方法

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Rails ではデフォルトで app/helpers/ 以下にあるヘルパは全て読み込まれる。 即ち、コントローラの階層と同様の階層にあるヘルパ以外のヘルパに定義されているメソッドを使用可能となる。 これを抑止し、コントローラの階層と同様の階層にあるヘルパのみ読み込まれるようにする方法を記述する。

内容の詳細

例えば、以下のようなファイルがあったとする。

  • app/controllers/products_controller.rb
  • app/controllers/users_controller.rb
  • app/helpers/products_helper.rb
  • app/helpers/users_helper.rb
  • app/views/products/index.html.erb
  • app/views/users/index.html.erb

この時、デフォルト設定では、 app/views/products/index.html.erb上でapp/helpers/users_helper.rbにあるメソッドを使用できる。

これを抑止し、app/views/products/index.html.erb上ではapp/helpers/products_helper.rb上にあるメソッドのみを使用可能になるようにする。

デフォルト設定のデメリット

  • 複数のヘルパファイルに同名のメソッドがあった場合、どちらが読み込まれるか解らない。
  • 結果的に、メソッド追加時に、重複するメソッド名がないか、全てのヘルパを確認しなければならない。
  • コントローラ名と同名のファイル名にする事で、どのコントローラで使用されるヘルパであるか解るようにする事ができるが、その利点があまり生かせない。

設定変更方法

config/application.rb に以下1行を追加すれば良い。

module AppName
  class Application < Rails::Application
    # 中略
    config.action_controller.include_all_helpers = false # この1行を追加
    # 中略
  end
end
記事を共有

最近人気な記事