おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

Rails2.1の新機能、named_scopeを試してみた

okyuuにコメントしてくれた人に教えてもらったのだけど、Rails2.1のARにはnamed_scopeという機能が追加されたらしい。
というわけでさっそくRails2.1にアップデートして どこでもお気に入りで試してみた。

class Category < ActiveRecord::Base  
  DEFAULT_NAME = "無分類"  
  named_scope :default, :conditions => {:title => DEFAULT_NAME}  
end  

とモデルに書いておけば、

  @category = @user.categories.default.first  

こう書けます。これは、

  @category = @user.categories.find(:first, :conditions => ["title = ?", Category::DEFAULT_NAME])  

と同じ意味です。これはコードがすっきりしていいですね。
ブロックを使えば、値を動的に変化させることもできます。

  named_scope :title_select, lambda {|t| {:conditions => ["title = ?", t]}}  

こうしておけば、

  @category = @user.categories.title_select(Category::DEFAULT_NAME).first  

こう書けるのです。
named_scopeはfind(:all)として働くようなので、配列が返ってくる点に注意しなければなりません。
ちなみに、上のコードだとSQL文には「limit 1」が付与されていた。firstまで見てSQL文を構築しているのか。Railsは頭がいいなあ。