SQL文の呼出とモデル

betweenでデータを取得するにはどうするのかな〜といろいろ探していたら、おもしろいものを発見。

最近データベースからfindでデータを取得するとき

@hoge = Hoge.find(:all, :conditions => ["id = ?", id])

このように:conditions,:orderなどを使って、様々な条件を付加するようになってきた。
これらをcontrollerに記述しているのだが、modelの方に記述して関数のように呼び出せるらしい。ほほう。

named_scope :date_between, lambda {|t_date, n_date| 
                                   {:conditions => ["date between ? and ?", t_date, n_date]}}
named_scope :date_koma_asc, :order => 'date asc, koma asc'

このようにnamed_scopeを使うとより便利。
上のnamed_scopeは引数を2つ用いるパターン。lambdaを用いて常に最新の値を引数に取る。
下のは複数のキーに対してソートする時のnamed_scope。今見ると簡単だが、andつけたりハッシュにしたりいろいろ試して大変だった。見つかってよかった。複数ソートの方法が全然検索しても無かった。

http://blog.dio.jp/2008/7/25/what-s-new-in-rails-2-1
Ruby On Rails ピチカート街道 - Rails 2.1・その6(named_scope がアツい) -