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