Railsでモデル間での共通関数を作る

Railsでモデル間で似た処理を書こうという思って、はてさてどうしようかなと小一時間ほど悩んだ結果。

まず、config/application.rbを編集して、config.autoload_pathsにパスを追加します。

config.autoload_paths += %W(#{config.root}/extras)

config/application.rbにコメント化されたものがあるのでそれを単に有効化するだけ。

で、似たような処理を書くファイルをRails.root/extrasに格納。今回は、Rails.root/extras/common_util.rbとして作成。Rails.root/extras/common_util.rbの中身は、

module CommonUtil
  def my_add(a, b)
    a + b
  end
  module_function :my_add
end

ってな感じで書く。

後は、CommonUtil.my_add(1, 2)って書けばどこでも呼び出せる。

とりあえず、今はこれで。Observerを使えば色々できそうなんだけど、なんだかちょっと使い道が違うなぁと思って。