Ruby on Rails에서 스코프 활용

ActiveRecord는 코어 Rails 엔진에서 ORM(Object Relational Mapping)의 구현을 고려하고 있으며 소프트웨어 설계 아키텍처는 변환기/라이더의 qual utilizamos técnicas de programação para converter/lidar com에서 daos entre o banco de dados로 인정받고 있습니다. 이 프로그램은 Ruby를 사용하여 객체를 지향합니다.

Ruby on Rails é um poderoso framework MVC que trás consigo várias soluções flexiveis e inteligentes para problemas já conhecidos dentro do desenvolvimento back-end.
Podemos citar algumas soluções que vem trazendo bastante poder aos desenvolvedores, porém hoje, trago uma funcionalidade que podemos utilizar nativamente em Rails, visto que vamos utilizar a RailsEngine::ActiveRecord
O funcionamento por "baixo dos panos"é poder fazer query em SQL puro, porém utilizando os conceitos e métodos através de uma linguagem padrão.

Ruby on Rails의 범위



• 기타 스코프?

Geralmente utilizamos scopes para construir query personalizadas dentro das entidades modelo da aplicação, e além disso, podemos utilizar o scope criado como um método de classe. Assim, fazemos uso desses scope como qualquer outro metodo presente no ActiveRecord.

Sintaxe 및 매개변수



Todo scope precisa receber dois argumentos, são eles:

• 1. Um nome, que será usado para chamar este scope no código.

• 2. uma lambda, que implementa a query.

A sintaxe de um scope é definido por:
scope :name_of_your_scope, -> { where(“column_name = ?”, value)}
Também podemos passar diferentes paraâmetros para utilizarmos ao fazer as nossas buscas. Para elucidar o conceito, suponhamos que seja necessário buscar em uma base de dados, os usuários que foram criados nos ultimos 30 dias.

다음과 같이 선언한 포데모스 범위 파라 리세버 파라메트로 날짜 다 세귄테 마네이라:

class User < ApplicationRecord
  scope :get_users_by_date, -> (date) { where(*"created_at > ?"*, 30.days.ago if date.nil?) }
end


30 dias a partir do dia de hoje.

Como resultado da chamada deste scope, recebemos um objeto do tipo ActiveRecord::Relation . 서로 다른 범위를 결합할 수 있다는 점에서 의미가 있습니다. Também, em termos de funcionalidade, o scope garante que erros sejam evitados caso o retorno da nossa query venha vazio.

범위 com SQL 퓨로



Outro jeito válido declararmos scopes, é utilizando query com SQL puro, assim conseguimos passar um ou mais paraâmetros no scope e utilizá-los dentro da query, e claro, evitando injeção de outros paraâmetros desnecessários na busca.

class User < ApplicationRecord
  scope :find_by_range_date, -> (start_date, end_date) { where(created_at >= ? AND created_at <= ?“, start_date, end_date)}
end


범위 대 기본 범위



Quando declaramos um default_scope , garantimos que por padrão, essa query será aplicada automaticamente em nosso modelo.

class User < ApplicationRecord
 default_scope { where(admin: true) }
end


Esse comportamento redefine por padrão o método.all do nosso modelo, portando devemos evitar seu uso, visto que alguns erros e tempo de depuração não sejam perdidos.

결론



Um dos grandes potenciais do Rails é poder combinar ou encadear outros scopes diferentes, assim podemos criar query mais fáceis de ler, ex:

def index
  date = Date.new(12/21/2021)
  @users = User.sort_by_creation(date).some_other_scope.where.not(role: admin)
end


Assim, ao utilizarmos outros scopes e até os métodos padrões do ActiveRecord, podemos separar de forma mais limpa e clara, as sponsabilidades e funcionalidades de cada query presente **nos modelos.

Outro ponto que não abordei ao longo deste guia, foi o uso de Lambdas para escrevermos os scopes utilizando apenas uma linha. Isso acontece pois a lambda é um objeto do tipo Proc. Basicamente, um proc, é um objeto que encapsula um bloco de código, exemplo:
lambda = ->(x) { x**2 }lambda = Proc.new {|x| x**2 }
Ao fazer lambda.(3) ou lambda.call(3) em ambas as variavéis, vamos receber o resultado 9. Mas isso deixo pra abordar em meu proximo aprendizado, até mais, nos vemos lá!

좋은 웹페이지 즐겨찾기