Railsのdefault_scopeは強力です。よくやる使い方としてはremovedという真偽値のカラムをdefault_scopeで default_scope -> { where(removed: false) } のように論理削除されたものは表示しないようにさせるといった使い方があります。しかしこれも管理画面では論理削除されたものも含めて集計したいなど、細かい欲求が出てくると意外とグローバルにスコープがセットされるのは都合が悪い。しかもdefault_scopeはmodelの初期値をセットしてしまう(これだとremoved = false)とか、解除するためにunscopedを使うとリレーションからのチェーンができない(@user.blogs.unscopedでuserのscopeごと消える)など残念な点も多いです。 そこで、弊社のRailsアプリではdefault_scopeは