モジュールでnamed_scopeを追加
モデルの機能ごとにモジュールにまとめてあとからまとめてincludeしたいというときに、どうせならその機能のために用意したちょっと複雑なnamed_scopeも同じように外に出してしまいたい。
そんな場合にはincludedとclass_evalを使う。
class Message < ActiveRecord::Base
include Extensions::Search
end
module Extensions
module Search
def self.included(mod)
mod.class_eval do
named_scope :name_like, lambda { |arg| {
:conditions => ["name LIKE ?", "%%arg%%"]
}}
end
end
end
end
> Message.name_like("ob").first.name #=> "Bob"
named_scopeも結局はクラスメソッド。この方法はnamed_scope以外にも利用できる。