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')
ほほー。