Railsでdefault_scopeの解除方法
環境
default_scopeの設定方法
order
やwhere
文などをdefault_scope
メソッドに渡してあげればおk
class User < ActiveRecord::Base ... default_scope { order(email: :asc) } default_scope { where(deleted_at: nil) } ... end
orderの解除方法
reorder
でorder
のみ解除できる。
User.all #=> "SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`email` ASC" User.reorder(nil) #=> "SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL User.reorder(id: :desc) #=> "SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` DESC"
特定のscopeの解除方法
except
またはunscope
で解除することが出来る。
unscope
の方はexcept
よりも細かい設定をすることが出来るようです。
User.all #=> "SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`email` ASC" User.except(:order) User.unscope(:order) #=> "SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL User.except(:where) User.unscope(:where) User.unscope(where: :deleted_at) #=> "SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC"
感想
今回は環境がRails4だったのでRails3などでは結果が違うかもしれないですね。