特定の処理をモジュール化したい
Railsで独自実装などを記しておく、自前のモジュールを使いたい場合が誰にでもあると思います。 その際の準備など書き記しておきます。
方法
下記に則って進めましょう
- 命名規則に沿ってモジュールを作る
- app/libにそのモジュールを置く
- 使用したいコントローラでincludeする
具体例
1. 命名規則に沿ってモジュールを作る
以下の命名規則に従ってモジュールを作ります。
- ファイル名は小文字で書く
- ファイル名の単語を_(アンダーバー)で区切る
- クラス名(モジュール名)はアッパーキャメルケースで記述する
例えば、モジュール名がFooBar
の場合、ファイル名はfoo_bar.rb
となります。
# lib/foo_bar.rb class FooBar def hello puts 'Hello, World' end end
2. app/libにそのモジュールを置く
上述の例で出したファイルのディレクトリにlib
が登場しましたね。
作成したファイルはapp/lib配下に配置しましょう。
もしlib配下にさらにもう一段ディレクトリが存在した場合は、下記のパターンがあります。 例えば、lib/foo配下にファイルを設置するとします。
モジュールを用いる場合
# lib/foo/bar.rb module Foo class Bar def hello puts "Foo::Bar: Hello, World" end end end
moduleを用いない場合
# lib/foo/bar.rb class Foo::Bar def hello puts "Foo::Bar: Hello, World" end end
3. 使用したいコントローラでincludeする
例えば、controllers/sample_controller.rbでfoo_bar.rbのモジュールを使用する場合は以下のようにincludeします。これで当該モジュールが使えるようになりました。
class SampleController < ApplicationController include FooBar def index hello # => 'Hello, World' end ... end
4.config/application.rbに一行追加
config.autoload_paths += %W(#{config.root}/lib)
これにて、autoloadの設定が完了し、命名の規約に従った場合に、lib ディレクトリ以下のファイルが自動的に読み込まれるようになります。
ただし、この記事だけを読んでも初歩の初歩でしか無いので、実務で使うとしたらこちらの記事が優れていると思うので、目を通すことをオススメします。