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
와 함께 사용 ¬
더 복잡한 쿼리를 작성하는 방법
이제 여러분이 이것을 실천할 차례입니다.
읽어주셔서 감사합니다 🙂