FrogApps 技術ブログ始めました!
RailsやiOS、HTML5の情報を発信中!! → http://qiita.com/teams/frogapps
Railsでアプリを作っていると、app/models/以下にあるモデルファイルの行数が非常に長くなることになります。
そこでincludeメソッドを使ってモデルファイルを機能毎に分割してみましょう。
ファインダー関係のメソッドだけを、user/finder.rbに切り出します。
このときクラスメソッド関係は通常の定義方法が異なります。
クラスメソッドの定義は、ClassMethodsモジュールの中で行う様にします。
has_many, belongs_toなどのクラスメソッドの実行は、self.includedの中でbase.has_manyの様にして呼び出します。
app/models/user.rb
class User < ActiveRecord::Base
include User::Finder
end
app/models/user/finder.rb
module User::Finder
def self.included(base)
base.extend ClassMethods
# クラスメソッドの呼び出し
base.has_many :items
end
# クラスメソッドの定義
module ClassMethods
def hot
...
end
end
# インスタンスメソッドの定義
def search(str)
...
end
end
このようにしてファイルを分けることで、モデルファイルが大きくなるのを避けられ機能毎に整理することができます。