railsのdefault_scopeとunscoped

DBの論理削除*1を使う場合、default_scopeを使うと便利。
論理削除ではないが、簡単な例を下記に書いておく。

default_scope

default_scopeをこのように定義しておく。

class Book < ActiveRecord:Base
  default_scope where(:R18 => false)
end

すると、

Book.create(:title => "コミック快楽天 2011年 07月号", :price => 380, :R18 => true)
Book.all
# => []

R18な本はallで出なくなります。

unscoped

一覧を出したい場合は

Book.unscoped.all
#=> [#<Book id: 1, title: "コミック快楽天 2011年 07月号", price: 380, R18: true)]

これでR18な本も晒せます。

*1:分からない方はググってください