Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby on Rails에서 범위를 사용하는 방법

Rails의 범위는 무엇이며 왜 유용한가요?

음...

범위는 scope를 사용하여 Rails 모델 내에서 정의하는 사용자 지정 쿼리입니다. 방법.

모든 범위에는 두 개의 인수가 필요합니다. :

  1. 코드에서 이 범위를 호출하는 데 사용하는 이름입니다.
  2. 쿼리를 구현하는 람다.

이렇게 생겼어요 :

class Fruit < ApplicationRecord
  scope :with_juice, -> { where("juice > 0") }
end

범위를 호출한 결과로 ActiveRecord::Relation 개체.

즉, 범위를 연결하고 결합할 수 있습니다!

:

Fruit.with_juice.with_round_shape.first(3)

지금 :

Rails 범위에 대해 더 배울 것이 있으므로 주제를 계속 탐색해 보겠습니다.

스코프는 언제 사용하나요?

스코프는 훌륭하지만 언제 사용해야 합니까?

예를 들어 보겠습니다.

def index
  @books = Book.where("LENGTH(title) > 20")
end

index입니다. 20자보다 긴 제목의 책을 ​​표시하려는 컨트롤러 작업

괜찮습니다.

하지만 이 쿼리를 다른 곳에서 사용하려면 중복된 코드가 있어야 합니다.

중복된 코드는 프로젝트를 유지 관리하기 어렵게 만듭니다.

이 쿼리를 범위로 이동해 보겠습니다.

좋아요 :

class Book
  scope :with_long_title, -> { where("LENGTH(title) > 20") }
end

이제 컨트롤러 작업은 다음과 같습니다. :

def index
  @books = Book.with_long_title
end

좋아요!

인수와 함께 Rails 범위를 사용하는 방법

더 유연하게 만들 수 있도록 범위에 변수를 도입할 수 있습니다.

방법은 다음과 같습니다. :

class Book
  scope :with_long_title, ->(length) { where("LENGTH(title) > ?", length) }
end

물음표(? )는 자리 표시자이며 length 값으로 대체됩니다. . 이렇게 하면 코드가 더 안전해집니다.

기본값을 원하는 경우 :

class Book
  scope :with_long_title, ->(length = 20) { where("LENGTH(title) > ?", length) }
end

시도해 보세요!

범위 대 클래스 방법

스코프는 마법 같은 일이나 아주 특별한 일을 하지 않습니다.

방법일 뿐입니다.

사실... 클래스 메서드를 사용하여 동일한 작업을 수행할 수 있습니다!

좋아요 :

class Fruit
  def self.with_juice
    where("juice > 0")    
  end
end

그러나 클래스 메서드보다 범위를 사용하면 설계상의 이점이 있습니다.

이유는 :

  • 구문으로 인해 범위가 더 깔끔한 코드를 생성합니다.
  • 스코프는 정확히 한 가지 용도로 사용되므로 보는 순간 무엇을 얻을 수 있는지 알 수 있습니다.
  • 스코프는 다른 방법과 혼합되지 않으므로 쉽게 식별할 수 있습니다.

기능면에서 유일한 차이점은 범위가 ActiveRecord::Relation을 보장한다는 것입니다. , 클래스 메서드는 그렇지 않습니다.

이렇게 하면 스코프가 아무 것도 반환하지 않을 때 오류를 방지하는 데 도움이 됩니다.

기본 범위를 사용하지 마십시오

기본 범위는 모델에 자동으로 적용되는 범위입니다.

:

class Post
  default_scope { where(published: true) }
end

네!

기본 범위가 너무 매력적입니다.

그러나 정의한 것을 잊어버리고 이상한 오류가 발생하고 디버깅에 귀중한 시간을 낭비할 수 있기 때문에 잘못된 선택인 경우가 많습니다.

그런데...

기본 범위로 작업해야 하는 경우 unscoped를 사용해야 할 수도 있습니다. 현재 적용된 모든 범위를 비활성화하는 방법입니다.

동영상 튜토리얼 보기

요약

잘 했어! 이 기사를 읽은 결과 가장 효과적인 방법으로 Rails 범위를 사용하는 방법을 배웠습니다.

이 새로운 지식이 어떻게 작동하는지 기억할 수 있도록 실천하는 것을 잊지 마십시오.

읽어 주셔서 감사합니다. 🙂