Ruby · Intermediário · Inglês · Técnico
scope
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 >= 100Exemplos
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