named_scopeの自動生成+お手軽検索

@ukstudioさんの「scopeでお手軽検索」 をRails2.3向けに少し修正1しつつ、カラムごとに一致検索をするようなnamed_scopeを自動生成するようにフック部分にしかけをした。

例えばnameカラムとageカラムを持ったUserモデルについて、

class User < ActiveRecord::Base
  extend Searchable
end

とすると、次のような感じでカラムの条件で簡単に検索が可能になる。

User.name("jsmith").first #=> User named jsmith
User.search(:name => "jsmith", :age => 20..30)

追記

これだけだとwhereの導入された3.0では記法的なあまりメリットはないかもしれない。2.x系なら:conditionsをキーとしたハッシュが不要になるというメリットはあるけど。

やっぱり独自のnamed_scopeを作ってこそ便利になる気がする。

  1. Rails2.3だとscopedに続けてnamed_scopeのメソッドを呼び出すとエラーが出るらしく、injectの引数にはselfのみを渡すようにした。