Module: ActiveRecord::Scoping::Default::ClassMethods
- Defined in:
- activerecord/lib/active_record/scoping/default.rb
Instance Method Summary collapse
- 
  
    
      #default_scopes?(all_queries: false)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    Checks if the model has any default scopes. 
- 
  
    
      #scope_attributes?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    Are there attributes associated with this scope?. 
- 
  
    
      #unscoped(&block)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns a scope for the model without the previously set scopes. 
Instance Method Details
#default_scopes?(all_queries: false) ⇒ Boolean
Checks if the model has any default scopes. If all_queries is set to true, the method will check if there are any default_scopes for the model  where all_queries is true.
| 62 63 64 65 66 67 68 | # File 'activerecord/lib/active_record/scoping/default.rb', line 62 def default_scopes?(all_queries: false) if all_queries self.default_scopes.any?(&:all_queries) else self.default_scopes.any? end end | 
#scope_attributes? ⇒ Boolean
Are there attributes associated with this scope?
| 55 56 57 | # File 'activerecord/lib/active_record/scoping/default.rb', line 55 def scope_attributes? # :nodoc: super || default_scopes.any? || respond_to?(:default_scope) end | 
#unscoped(&block) ⇒ Object
Returns a scope for the model without the previously set scopes.
class Post < ActiveRecord::Base
  belongs_to :user
  def self.default_scope
    where(published: true)
  end
end
class User < ActiveRecord::Base
  has_many :posts
end
Post.all                                  # Fires "SELECT * FROM posts WHERE published = true"
Post.unscoped.all                         # Fires "SELECT * FROM posts"
Post.where(published: false).unscoped.all # Fires "SELECT * FROM posts"
User.find(1).posts                        # Fires "SELECT * FROM posts WHERE published = true AND posts.user_id = 1"
User.find(1).posts.unscoped               # Fires "SELECT * FROM posts"
This method also accepts a block. All queries inside the block will not use the previously set scopes.
Post.unscoped {
  Post.limit(10) # Fires "SELECT * FROM posts LIMIT 10"
}
| 50 51 52 | # File 'activerecord/lib/active_record/scoping/default.rb', line 50 def unscoped(&block) block_given? ? relation.scoping(&block) : relation end |