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

Rails Where 메서드를 사용하는 방법(예제 포함)

Rails에서는 모델을 통해 데이터베이스를 쿼리하여 데이터에 액세스할 수 있습니다.

ActiveRecord를 사용하여 이 작업을 수행할 수 있습니다. 방법.

where처럼 , find , 또는 find_by .

결과적으로 :

  • find_by 사용 , 단일 레코드 또는 nil
  • where 포함 , ActiveRecord::Relation 개체
  • find 사용 , 기본 열에서 찾은 단일 레코드(보통 id ), 찾지 못하면 예외 발생

:

하나의 레코드(특정 사용자)가 필요한 경우 find_by를 사용하세요. , 여러 레코드(사용자 목록)의 경우 where 사용 .

하지만 where 사용 방법이 다양하여 초보자를 혼동하는 경우가 많습니다.

문제 없습니다!

where를 사용할 수 있는 다양한 방법을 살펴보겠습니다. Rails 애플리케이션에서.

기본 Where 조건

where 사용 목적 원하는 행만 얻을 수 있도록 데이터베이스의 정보를 필터링하는 쿼리를 작성하는 것입니다.

예를 들어 :

주어진 Book title이 있는 모델 , author &category .

특정 저자의 모든 책을 찾거나 특정 범주에 속한 모든 책을 찾을 수 있습니다.

쿼리입니다 :

Book.where(category: "Ruby")

category가 있는 모든 책을 반환합니다. "루비"의.

조건을 결합할 수도 있습니다.

좋아요 :

Book.where(category: "Ruby", author: "Jesus Castello")

category와 일치하는 책을 반환합니다. &author .

그리고 where를 결합할 수 있습니다. 범위가 있습니다.

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

# controller code
@books = Book.long_title.where(category: "Ruby")

해시 사용(fruit: "apple" ), 열이 어떤 것과 같은지 확인할 수 있습니다.

하지만 평등을 추구하지 않는다면 어떻게 될까요?

그런 다음 문자열을 사용해야 합니다.

다음 위치:초과 및 미만

"보다 큼", "보다 작음" 또는 이와 유사한 항목을 확인하려면...

이렇게 하세요 :

Book.where("LENGTH(title) > 20")

값을 보간해야 하는 경우...

이렇게 하세요 :

Book.where("LENGTH(title) > ?", params[:min_length])

? "자리 표시자"라고 하며 "SQL 주입" 공격을 피하기 위한 보안에 사용됩니다.

또 다른 옵션은 명명된 자리 표시자를 사용하는 것입니다.

:

Book.where("LENGTH(title) > :min", min: params[:min_length])

물음표 자리 표시자보다 덜 일반적이지만 보간된 값이 많이 포함된 쿼리에 유용할 수 있습니다.

Where Not &Where 또는 Conditions 사용 방법

더 복잡한 쿼리를 살펴보겠습니다.

조건이 true가 아닌지 확인하려면 where를 결합할 수 있습니다. not 방법.

예시 :

Book.where.not(category: "Java")

또 다른 예 :

Book.where.not(title: nil)

Book를 찾습니다. title이 있는 s nil이 아닙니다. .

OR 조건은 어떻습니까?

where를 결합할 수 있습니다. or 둘 이상의 조건 ​​중 하나와 일치하는 행을 가져오는 메서드입니다.

작동 방식은 다음과 같습니다. :

Book.where(category: "Programming").or(Book.where(category: "Ruby"))

이것은 두 개의 where를 결합합니다. 쿼리를 하나로 통합합니다.

시도해 보세요!

Rails Where IN 배열 예

우리가 본 모든 예는 하나의 특정 값을 찾습니다.

하지만 여러 값을 찾을 수 있습니다.

어떻게?

배열 사용하기!

:

Book.where(id: [1,2,3])

이렇게 하면 이러한 모든 ID를 동시에 검색하는 "IN" 쿼리가 생성됩니다.

SELECT "books".* FROM "books" WHERE "books"."id" IN (1, 2, 3)

레일 로그에서 이 쿼리를 찾을 수 있습니다.

Rails Join 연결 조건

연관 값을 기반으로 일치시키려는 경우 해당 연관을 joins으로 사용할 수 있도록 해야 합니다. 방법.

이렇게 하면 됩니다 :

Book.joins(:comments).where(comments: { id: 2 })

이 쿼리를 사용하면 주석이 있는 모든 책과 주석 id를 얻을 수 있습니다. 2입니다. .

문자열 버전의 경우 :

Book.joins(:comments).where("comments.id = 2")

comments 위치 는 테이블 이름이고 id 열 이름입니다.

Where LIKE 조건으로 텍스트 내부를 검색하는 방법

검색 기능을 구현하려면 부분 일치를 허용할 수 있습니다.

"LIKE" 쿼리로 이 작업을 수행할 수 있습니다.

예시 :

Book.where("title LIKE ?", "%" + params[:q] + "%")

이렇게 하면 params(params[:q] ), 제목 내 아무 곳이나.

매우 유용한 쿼리입니다!

퍼센트 기호란? ?

SQL에서 % 와일드카드 문자입니다.

동영상:Where vs Find_By 자세히

요약

Rails where 사용법을 배웠습니다. ActiveRecord 쿼리 방법 모델!

포함 :

  • 여러 조건으로 필터링하는 방법
  • 배열을 사용하여 여러 행을 효율적으로 찾는 방법
  • where 사용 방법 or와 함께 사용 &not 더 복잡한 쿼리를 작성하는 방법

이제 여러분이 이것을 실천할 차례입니다.

읽어주셔서 감사합니다 🙂