その他
    ホーム 技術発信 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