Ruby on Rails에서 스코프 활용
6825 단어 rubyrailsactiverecordtutorial
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á!
Reference
이 문제에 관하여(Ruby on Rails에서 스코프 활용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gbs0/utilizando-scopes-em-ruby-on-rails-26ef텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)