unscopedとkaminari

default_scopeを外そうとしてunscopedしてからkaminariのpageオブジェクトにすると奇妙なことになる。

class Item < ActiveRecord::Base
  default_scope where(:closed => nil)
  paginates_per 20
end
> Item.scoped.to_sql
# => "SELECT `items`.* FROM `items` WHERE `items`.`closed` IS NULL"
> Item.scoped.page.to_sql
# => "SELECT `items`.* FROM `items` WHERE `items`.`closed` IS NULL LIMIT 20 OFFSET 0"
> Item.unscoped.to_sql
# => "SELECT `items`.* FROM `items`"
# ここまでは想定通り
> Item.unscoped.page.to_sql
# => "SELECT  `items`.* FROM `items` WHERE `items`.`closed` IS NULL LIMIT 20 OFFSET 0"
# えええなんで?

Rails3.0.10で確認。3.1.3だと直っているので、3.0系のみの問題かな。

回避方法探してstackoverflow漁ったらamatsudaさんが回答してた

> Item.unscoped{ Item.page.to_sql }
# => "SELECT  `items`.* FROM `items` LIMIT 20 OFFSET 0"

3.0系でdefault_scopeは注意した方がいいよねってことで。