2010-11-27 1 views
6

두 테이블을 조인하고 모델과 관련된 모든 열을 반환하려고합니다.레일 3 조인에서 모든 열 반환

Comment.joins(:user).select("*") 

는 SQL은 잘 보이지만, 여전히, 그것은 단지 의견과 그와 관련된 사용자 정보의 없음을 반환

나는 그런 일이 다음과 같습니다있다.

comments.*이 아닌 *을 어떻게 검색 할 수 있습니까?

답변

7

무엇

comments = Comment.includes(:user).all 

이제 comments 당신이 루프를해야합니다 그래서 모든 사용자가 볼을 통해 배열 될 것이다.

#won't work 
comments.user 

#should work 
comments[0].user 

comments.each do |comment| 
    puts comment.user.name #or whatever 
end 
+0

여전히 사용자 정보를 표시 할 수 없습니다. Mishka 's로 가서 이걸 도와주세요.) – Dex

+0

Nice Davis reference. – rwilliams

+0

나는 너무 길어졌다.). 이 작동합니다. 모든 것이 열심히로드되고 있는지 확인하고 싶었습니다. – Dex

1

Comment.select ('*')가 포함되어 있습니다.

comments = Comment.joins(:user).includes(:user) 

을하지만, 여기에 당신이 당신의 콘솔에서 출력을 보는 경우 나, 무슨 일이 일어나고 무엇을 생각 : (: 사용자)

+0

마우스 오른쪽 - 당신은 SQL하거나 데이터를 다시 점점 걱정이라면 나는 확실하지 않았다. 이 경우 DB로 돌아 가지 않고도 주석과 사용자를 모두 얻을 수 있습니다. – Cory

+0

Comment.select ("Comments. *, Users. *") – Cory

2

이 작동합니다 windows, 나는 콘솔 출력은 반영/루트 수준의 개체를 반환합니다 검사합니다.

위 코드를 실행 한 실험을 방금했습니다. 터미널 출력은 주석을 가져 왔지만 연관된 사용자는 언급하지 않았 음을 기록했습니다. 다음으로 데이터베이스를 종료하여 데이터베이스에 대해 두 번째 쿼리를 실행할 수 없도록 한 다음 관련 사용자를 묻습니다.

comments.user 

에는 데이터베이스 연결이 시도되지 않았기 때문에 이미 열심히,로드 된 것을 증명 콘솔 출력 사용자.

+0

흥미 롭습니다. 나는 똑같은 것을 궁금해하고 있었다. 질의를 캐싱해도 혼동을 줄 수 있지만'comments.user'를 실행할 때 질의가 실행되는지 여부를 알 수 있습니다. – wuliwong