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は注意した方がいいよねってことで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>