Módulo: Mongoid::Scopable::ClassMethods

Definido em:
lib/mongoid/scopable.rb

Recolhimento do Resumo do método de instância

Detalhes do método de instância

#default_scopable?verdadeiro | false

A classe pode ter o escopo padrão aplicado?

Exemplos:

O escopo padrão pode ser aplicado?

Band.default_scopable?

Retorna:

  • (verdadeiro | falso)

    Se o escopo padrão puder ser aplicado.



95
96
97
# Arquivo 'lib/mongoid/scopable.rb', linha 95

def default_scopeble?
  default_scoping? && !Threaded.sem_default_scope?(auto)
end

#default_scope(value = nil) ⇒ Proc

Adicione um escopo padrão ao modelo. Esse escopo será aplicado a todos os critérios, a menos que #unscoped seja especificado.

Exemplos:

Defina um escopo padrão com um critério.

class Band
  include Mongoid::Document
  field :active, type: Boolean
  default_scope where(active: true)
end

Defina um escopo padrão com um proc.

class Band
  include Mongoid::Document
  field :active, type: Boolean
  default_scope ->{ where(active: true) }
end

Parâmetros:

  • valor (Proc | Critérios) (padrão para: nil)

    O escopo padrão.

Retorna:

  • (Proc)

    O escopo padrão.

Aumenta:



83
84
85
86
87
# Arquivo 'lib/mongoid/scopable.rb', linha 83

def default_scope(valor = nada)
  valor = Proc.Novo { rendimento } se block_given?
  check_scope_validity(valor)
  auto.default_scoping = process_default_scope(valor)
end

#queryableCriteria

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Obtenha um queryable, seja o último na pilha de escopo ou um novo.

Exemplos:

Obtenha um queryable.

Model.queryable

Retorna:



107
108
109
110
111
# Arquivo 'lib/mongoid/scopable.rb', linha 107

def consultável
  crit = Threaded.current_scope(auto) || critério.Novo(auto)
  crit.incorporado = true se (crit.classe.incorporado? && !crit.classe.cíclica?)
  crit
end

#scope(nome, valor, & bloco) ➤ Objeto

Crie um escopo que possa ser acessado a partir do nível da classe ou encadeado a critérios pelo nome fornecido.

Exemplos:

Criar escopos nomeados.


class Person
  include Mongoid::Document
  field :active, type: Boolean
  field :count, type: Integer

  scope :active, -> { where(active: true) }
  scope :at_least, ->(count){ where(:count.gt => count) }
end

Parâmetros:

  • name (Símbolo)

    O nome do escopo.

  • valor (Proc)

    As condições do escopo.

Aumenta:



132
133
134
135
136
137
138
139
140
141
# Arquivo 'lib/mongoid/scopable.rb', linha 132

def escopo(name, valor, &noum: bloco ; verb: bloquear)
  Normalizado = name.to_sym
  check_scope_validity(valor)
  check_scope_name(Normalizado)
  _declared_scopes[Normalizado] = {
    escopo: valor,
    extensão: Módulo.Novo(&noum: bloco ; verb: bloquear)
  }
  define_scope_method(Normalizado)
end

#scoped(options = nil) ➤ Critérios

Observação:

Isso forçará a aplicação do escopo padrão.

Obtenha um critério para o documento com escopo normal.

Exemplos:

Obtenha os critérios.

Band.scoped(skip: 10)

Parâmetros:

  • opções (Hash) (padrão para: nil)

    Opções de query para os critérios.

Hash de opções (opções):

  • :skip (Inteiro)

    Número opcional de documentos a ignorar.

  • :limit (Inteiro)

    Número opcional de documentos a serem limitados.

  • :sort (Array)

    Opções de classificação opcionais.

Retorna:



158
159
160
# Arquivo 'lib/mongoid/scopable.rb', linha 158

def com escopo(opções = nada)
  consultável.com escopo(opções)
end

#scopesHash

Retorna um hash de todos os escopos definidos para essa classe, incluindo escopos definidos em classes ancestrais.

Exemplos:

Obter os escopos definidos para uma classe

class Band
  include Mongoid::Document
  field :active, type: Boolean

  scope :active, -> { where(active: true) }
end
Band.scopes

Retorna:

  • (Hash)

    Os escopos definidos para esta classe



51
52
53
54
55
56
57
58
59
# Arquivo 'lib/mongoid/scopable.rb', linha 51

def scopes
  definido_scopes = {}
  ancestrais.reverter.cada fazer |classe|
    se classe.respond_to?(:_declared_scopes)
      definido_scopes.mesclar!(classe._declared_scopes)
    end
  end
  definido_scopes.congelar
end

#sem escopoCritérios | Objeto

Observação:

Isso forçará o escopo padrão, bem como qualquer escopo aplicado usando “.with_scope”, a ser removido.

Obtenha os critérios sem nenhum escopo aplicado.

Exemplos:

Obtenha os critérios sem escopo.

Band.unscoped

Rendimento para bloquear sem escopo.

Band.unscoped do
  Band.where(name: "Depeche Mode")
end

Retorna:

  • (Critérios | Objeto)

    Os critérios sem escopo ou resultado do bloqueio.



177
178
179
180
181
182
183
184
185
186
187
# Arquivo 'lib/mongoid/scopable.rb', linha 177

def sem escopo
  se block_given?
    sem_default_scope fazer
      with_scope(nada) fazer
        rendimento(auto)
      end
    end
  mais
    consultável.sem escopo
  end
end

#with_default_scope ➤ Critérios Também conhecido como: critério

Obtenha um critério com o escopo padrão aplicado, se possível.

Exemplos:

Obtenha um critério com o escopo padrão.

Model.with_default_scope

Retorna:



195
196
197
# Arquivo 'lib/mongoid/scopable.rb', linha 195

def with_default_scope
  consultável.with_default_scope
end

#with_scope(critérios) ➤ Critérios

Envia os critérios fornecidos para a pilha de escopo e os remove depois que o bloco fornecido é gerado.

Exemplos:

Rendimento para os critérios.

Person.with_scope(criteria)

Parâmetros:

  • critério (Critérios)

    Os critérios a serem aplicados.

Retorna:



209
210
211
212
213
214
215
216
217
# Arquivo 'lib/mongoid/scopable.rb', linha 209

def with_scope(critério)
  anterior = Threaded.current_scope(auto)
  Threaded.set_current_scope(critério, auto)
  começar
    rendimento critério
  garantir
    Threaded.set_current_scope(anterior, auto)
  end
end

#sem_default_scope ➤ Objeto

Execute o bloco sem aplicar o escopo padrão.

Exemplos:

Execute sem o escopo padrão.

Band.without_default_scope do
  Band.where(name: "Depeche Mode")
end

Retorna:

  • (Objeto)

    O resultado do bloqueio.



227
228
229
230
231
232
# Arquivo 'lib/mongoid/scopable.rb', linha 227

def sem_default_scope
  Threaded.begin_without_default_scope(auto)
  rendimento
garantir
  Threaded.exit_without_default_scope(auto)
end