Overriding default_scope in Rails

Jess picture Jess · Jan 15, 2010 · Viewed 8.3k times · Source

In my Post.rb model, I have default_scope :conditions => {:deleted => 'false'}

But if I try to run Post.find(:all, :conditions => "deleted='false'"), it won't return anything. It's as if the default_scope takes precedence over everything.

I want it so that when I do Post.find() it doesn't return deleted posts, but I'd also like to be able to access them if I need to. What needs to be changed in either my query or my Rails model?

Thanks.

Answer

edgerunner picture edgerunner · Oct 17, 2010

This one was somehow left hidden :)

Just use Post.unscoped.where(:deleted => true), if you're using Rails 3

Credit goes to José Valim for this.