Module: ActiveRecord::Scoping::Default::ClassMethods

Defined in:
activerecord/lib/active_record/scoping/default.rb

Instance Method Summary collapse

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.

Returns:

  • (Boolean)


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?

Returns:

  • (Boolean)


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