Search code examples
ruby-on-railsmodelsdefault-scope

Overriding default_scope in Rails


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.


Solution

  • with_exclusive_scope is protected, so you have to create a class method:

    def self.include_deleted_in
      Event.with_exclusive_scope { yield }
    end
    

    then in your controller call

    Post.include_deleted_in { Post.find(:all) }