ExpertiDict

Ruby · Intermediário · Inglês · Técnico

scope

/skoʊp/método

Consulta nomeada e reutilizável de um model do ActiveRecord, definida com scope e um lambda. Devolve uma relation, então pode ser encadeada com outros escopos e condições.

Onde usar

Aparece para dar nome a filtros repetidos, como Pedido.pagos.caros. Mantém os controllers enxutos e a lógica de consulta dentro do model.

Em código

class Pedido < ApplicationRecord
  scope :pagos, -> { where(status: "pago") }
  scope :caros, -> { where(total: 100..) }
end
Pedido.pagos.caros.to_sql
# WHERE status = 'pago' AND total >= 100

Exemplos

Turn that where clause into a scope.

Transforme essa cláusula where em um scope.

Scopes chain, so paid.recent just works.

Scopes encadeiam, então paid.recent funciona direto.

Cuidado

O escopo deve devolver uma relation; se o lambda devolver nil, o scope devolve all e pode trazer registros demais.

Sinônimos

escopo

Veja também

Todos os termos de Ruby