Relation으로 SQL 릴리즈 횟수를 억제하는 방법

1720 단어 RailsRubytech

Relation이란 무엇입니까?


Relation에서는 데이터베이스에 대한 문의 결과가 아니라'어떤 SQL을 발행하느냐'는 정보를 유지하고 있을 뿐 실제 SQL의 실행 결과가 필요하기 전에는 데이터베이스에 대한 접근을 하지 않는다.
이렇게 하면 데이터베이스와의 통신이 수요를 초과하는 것을 억제할 수 있다.
또한 이번 내용과는 무관하지만 사용법 검사를 위해 이 디자인도 빠질 수 없다.
왜냐하면 방법을 호출할 때 SQL이 실행된 상황에서 모든 조건을 함께 방법에 전달할 필요가 있기 때문이다.

SQL 릴리즈 횟수 억제 인스턴스



이런 모델을 예로 들자.
만약 id에서 사용자가 좋아하는 상품 1개를 추출하면 다음과 같은 방법으로 SQL의 발행 횟수를 억제할 수 있다.
 product_ids = Like.where(user_id: 1).select(:product_id)
 products = Product.where(id: product_ids)
where,select 방법은 모두AccetveRecord:Relation의 조회 인터페이스를 되돌려주고 첫 번째 줄은 데이터베이스에 물어보지 않습니다.
두 번째 줄은 데이터베이스에 처음 물어보기 때문에 SQL의 발행을 한 번에 제어할 수 있다.
당연히 rails tutorial이죠.
14.3.3 하위 선택처럼 SQL문으로 써도 되지만 어렵게 AccctveRecord: Relation을 사용할 수 있지만 굳이 SQL문을 쓸 필요는 없을 것 같아요.
 product_ids = "SELECT product_id FROM likes
                     WHERE user_id = 1"
 products = Product.where(id: product_ids)

참고 자료


· 완벽한 루비 온 레일스
Active Record 쿼리 인터페이스
rails 튜토리얼 선택 왜 고속화

좋은 웹페이지 즐겨찾기