Railsでのモジュールの使い方のメモです。
Railsプロジェクト内の/config/application.rbファイル内にモジュール設置パス以下のファイルを自動でロードする指定をし、クラス内で "include モジュール名" と指定することで該当モジュールを読み込めるようになります。
モジュールはRailsプロジェクト内の/lib以下に設置します。
コントローラ、ヘルパー、モデルで共通で使われる機能はモジュールにまとめて必要に応じて呼び出します。
動作確認環境
- Rails (Ver 4.0.0)
- Rails 4.0: Final version released!
- Rails (Ver 3.2.13)
※2013/9/15 追記
コメント欄で御指摘いただきました。
Rails 4.0.0でもこのやり方で動きましたが、Rails4からapp/controllers/concerns, app/model/concernsというディレクトリが追加され、これらのディレクトリにモジュールを設置する形になったようです。
-
ActiveSupport::Concern
Rails3までは以下のやり方で設定することになると思います。Rails 3.2.13では動作確認できました。
サンプルコード
自動ロード対象となるパスの指定(Rails3からautoload_pathsの設定はデフォルトでは無効)
/config/application.rb
…
module TestApp
class Application < Rails::Application
…
### モジュール自動ロードPathの指定を追記
config.autoload_paths += %W(#{config.root}/lib)
…
end
end
モジュール定義
/lib/testmodule.rb
module Hoge
def test_module_method
処理内容
end
end
モジュールの読み込み(以下はコントローラクラスの例)
/app/controllers/test_controller.rb
class TestController < ApplicationController
### モジュールの読み込み(インクルード)
include Hoge
…
def index
…
### indexメソッド内でHogeモジュールの「test_module_method」メソッドを実行
test_module_method
…
end
…
end