この記事はアピリッツの技術ブログ「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