以下の記事は、調査の結果現状のRuby on Rails では期待通りに動かないことがわかりました。


Rails-2.1の新機能であるnamed_scopeを使うと、従来のwith_scope では綺麗にかけなかったスコープの選択を簡潔に記述することができます。

   1  def gadgets_on_sidebar(place = 'index')
   2    case place.to_s
   3    when 'index'; Gadget.on_index
   4    when 'show'; Gadget.on_show
   5    else Gadget.all
   6    end.with_scope{active_gadgets + Gadget.mandatories}
   7  end

各スコープメソッドは、ActiveRecord::NamedScope::Scope オブジェクトを返すので、 これを条件にしたがって選択し、最後に.with_scope を呼んでスコープを適用します。


そこで、 with_named_scope というGemプラグインをつくり、 上述のように処理できるようにしました。 以下のようになります。

   1  def gadgets_on_sidebar(place = 'index')
   2    case place.to_s
   3    when 'index'; Gadget.on_index
   4    when 'show'; Gadget.on_show
   5    else Gadget.all
   6    end.with{active_gadgets + Gadget.mandatories}
   7  end

ということで、Rails本家にもpatchを送っておきました。

posted by Png genki on Fri 1 Aug 2008 at 13:52 with 3 comments

Comments:

Png 瀧内元気 over 11 years ago.

どういうわけか.allを呼ぶと誤記していたので.with_scopeに訂正しました。

Png 瀧内元気 over 11 years ago.

と思ったけれど、どうやらAR.some_scope.with_scope{} が期待通りに動いてくれない(Rails-2.1)らしい。

目下調査中です。

Png 瀧内元気 over 11 years ago.

with_scopeと一緒に使う機能がなさそうだったので、Railsにパッチを送りました。

Improved named_scope to be used like as with_scope

or Preview
Social Bookmarks
  • Delicious
  • B_entry718
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ