2012-02-06 3 views
2

두 개의 모델/테이블 A 및 B가 있습니다. 두 테이블의 열이 결과에 포함되어있는 Active Record 쿼리를 수행하고 싶습니다. 두 테이블의 열을 결합한 것처럼 들리는 것처럼 inner joins을 시도했습니다. 그러나 액티브 레코드 joins 찾기 메소드를 사용하면 첫 번째 테이블에서만 결과가 반환됩니다.일반 Active Record 조인 또는 포함

결과에 두 테이블의 열이 포함 된 활성 레코드 쿼리에는 어떤 것이 있습니까? 아마도 includes 찾기 메소드가 도움이 될 수 있습니다.

: 두 테이블을 ForumThreads 및 Posts라고 생각하십시오. 각 포럼 스레드는 여러 게시물을 가지고 있습니다. 나는 각 게시물에 대한 정보와 포럼 스레드 (예 : 스레드 제목)에 대한 정보를 포함하는 쿼리 결과의 행을 원합니다.

이 질문에

내 질문에 대답이있을 수 있습니다 Rails Joins and include columns from joins table

+2

당신이 뭘 하려는지에 대한 특정 될 수 있을까? '포함 '은 데이터를 열심히로드 할 것입니다. 그러나'ActiveRecord'는 그 결과를 여러분에게 숨기고 단지 배열에 부모 객체를 반환 할 것입니다. 'relationships'이로드되지만 결과에는 표시되지 않습니다. 데이터를 조금만 사용하려는 방법에 대해 자세히 설명하십시오. – Azolo

+0

@Azolo가 질문을 자세한 정보로 업데이트했습니다. – SundayMonday

+1

@Gazler 그것을 가지고, 사용'포함' – Azolo

답변

9

Joins은 내부 조인 수행하지만, 당신이 그것을 요청할 때까지 데이터를 반환하지 않습니다.

User.where(:id => 1).joins(:client_applications) 
User Load (0.2ms) SELECT "users".* FROM "users" INNER JOIN "client_applications" ON "client_applications"."user_id" = "users"."id" WHERE "users"."id" = 1 

Includes은 (경우에 사용) 두 개의 쿼리를 실행하고 관련 데이터 (열망로드)를 캐시합니다

User.where(:id => 1).includes(:client_applications) 
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 
    ClientApplication Load (13.6ms) SELECT "client_applications".* FROM "client_applications" WHERE "client_applications"."user_id" IN (1) 
+0

나는'포함'을 사용하여 시도했지만 쿼리 결과는 여전히 첫 번째 테이블에서만 열이 있습니다. 두 테이블의 예제 쿼리를 게시하십시오. – SundayMonday

+1

@MrMusic 리소스를 요청해야합니다. 위의 예에서'users = User.where (: id => 1) .includes (: client_applications)'를 할 수 있습니다. 그러면 클라이언트 응용 프로그램을 원하면'users.first.client_applications'를 할 수 있습니다. 초기 쿼리의 캐시 된 결과에서 캐시를 검색하십시오. – Gazler

관련 문제