0

사용자 has_many이 게시 된 포스트 및 사용자 모델이 있다고 가정 해보십시오. User 모델의 속성은 name입니다.연관된 ActiveRecord 모델의 속성을 효율적으로 참조 (레일즈 4)

User#namePost.all.each {|post| puts post.user.name}과 같은 게시물 개체의 쿼리에 표시하고 싶습니다. 이 별도의 발행보다 가입 오히려 통해이를 찾아 볼 수 있습니다 레일을 알 수있는 방법이 있나요이 작동하지만, 레일은

SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 25]] 

처럼 각 개별 사용자의 이름을 조회하기 위해 N 포스트의 각각에 대한 데이터베이스 쿼리를 실행 각 인스턴스에 대한 쿼리? Post.all.joins(:user).select('posts.*,users.name')과 같은 표준 조인을 사용하려고하면 ActiveRecord :: Relation 객체가 적절하게 돌아 오지만 반복되는 동안 행의 각 게시물에 대해 새 쿼리가 계속 실행됩니다.

+2

Try Post.includes (: user) 포함 http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-includes를 읽어보십시오. – cristian

답변

3

당신이 시도 할 수 :

Post.includes(:user) 

그것은 열망로드라고, 성능이 현명이 두 DB 쿼리 (check docs here)

를 발행한다

문서는 로딩에 조건 (적용해야 할 때 대신 Joins를 사용하는 것이 좋습니다 예 : 's'로 시작하는 사용자의 게시물)