コントローラでもビューでも使いたいメソッドはどこに置く?
Railsでは application.rb に定義したメソッドは,どのコントローラからも呼び出すことができる。application_helper.rb に定義したメソッドは,どのビューからも呼び出すことができる(application_helper.rb に定義したメソッドをコントローラから呼び出したり,application.rb に定義したメソッドをビューから呼び出すことはできない)。
コントローラ/ビューの双方から呼び出すメソッドを定義したいときはどうするのか。libディレクトリ内に入れればいいみたい。ここにクラス名とファイル名を一致させた .rb ファイルを置いておくと,クラスメソッドを require 無しで呼び出すことができる。便利。
class Utility def self.pr(arg) puts arg end end
という定義を書いたUtility.rbをlibディレクトリに置けば,いきなり「Utility.pr('foo')」と書ける。でも関数的に使えるapplication.rbやapplication_helper.rbに定義したメソッドと比べると冗長にも思える。ならば
def pr(arg) puts arg end
と,クラス定義をとっぱらっちゃって,その代わりにenvironment.rbの最後でrequire 'Utility'した方が「pr('bar')」と関数的に書けて便利かも。他にも何かいいやり方がないかなあ。