アーカイブ

2010 年 11 月 のアーカイブ

default_scopeを個別に外す。 このエントリーを含むはてなブックマーク はてなブックマーク - default_scopeを個別に外す。

2010 年 11 月 18 日 Comments off

default_scopeを全部外すにはunscopedだったのですが、特定の条件だけ外すにはどうしたらよいのか調べていたら、こちらにたどり着きました。

default_scopeのorderをキャンセルする – とある技術屋の戯言

Model.reorder(‘id DESC’)

おーなるほどと思いつつ、他にもあるのかとドキュメントを見に行ったら・・・([ show source ]をクリック)

Module: ActiveRecord::QueryMethods

# File activerecord/lib/active_record/relation/query_methods.rb, line 56
56: def reorder(*args)
57: ActiveSupport::Deprecation.warn "reorder is deprecated. Please use except(:order).order(…) instead", caller
58: relation = clone

ん?

class Article < ActiveRecord::Base
  default_scope where(:disclosed => true).order('disclosed_at DESC')
end

Article.all #=> SELECT "articles".* FROM "articles" WHERE ("articles"."disclosed" = 't') ORDER BY disclosed_at DESC
Article.except(:where).all #=> SELECT "articles".* FROM "articles" ORDER BY disclosed_at DESC
Article.except(:order).all #=> SELECT "articles".* FROM "articles" WHERE ("articles"."disclosed" = 't')

ほほー。

カテゴリー: Rails, Ruby タグ:

default_scopeはunscopedで外す。 このエントリーを含むはてなブックマーク はてなブックマーク - default_scopeはunscopedで外す。

2010 年 11 月 14 日 Comments off

with_exclusive_scope (ActiveRecord::Base) – APIdock

In Rails3 use "unscoped" instead

The with_exclusive_scope examples no longer work in Rails3 because with_exclusive_scope is now a protected method which can and should not be used in a controller. Use the new unscoped method instead:

ほー。

class Post < ActiveRecord::Base
  default_scope :published => true
end

Post.all #=> SELECT * FROM posts WHERE published = true

Post.unscoped.all #=> SELECT * FROM posts

ほほー。

カテゴリー: Rails, Ruby タグ: