2014-02-24 1 views
0

SQL에서 정확히 3 초가 걸리는 작업을 수행하고 싶습니다. 몇 시간 동안 고민하고 있습니다. 모든 레코드를로드하고 존재하지 않으면 참여하지 않으려 고합니다. 관련된 모델을주지 마라.레일스가 연관 및 ID에 합류합니다

"SELECT * FROM apartments LEFT JOIN comments ON apartments.id = comments.apartment_id AND comments.user_id = ?" 

을 내가 apartment.comments를 호출 할 때, 그것은 나에게 특정 사용자에 딱 레코드 (하나가 될 수 있습니다), 모든주지 다음과 같이

내가 만들려는 쿼리입니다 모든 사용자에 대한 기록.

나는
Apartment.joins("LEFT OUTER JOIN comments ON comments.apartment_id = apartments.id AND comments.user_id = #{user_id}") 

을 시도하지만 apartments.comments를 호출 할 때 가능한 모든 의견을 돌려 다른 쿼리를 발생로는 작동하지 않습니다.

Apartment.includes(:comments).where("comments.user_id = ?", user_id) 

도 특정 사용자의 의견이있는 아파트 만 반환하므로 제대로 작동하지 않습니다.

도움이 필요합니다.

+0

코드에서 오류의 많은. table_name없이 'LEFT JOIN ON'이란 무엇입니까? 왜 테이블 이름이 다른가? : LEFT OUTER JOIN trip_items ON comments .'? – alex

+0

당신이 정확하고 고정되어 있습니다. 붙여 넣기를 복사하고 이름을 변경하여 좀 더 이해하기 쉬워졌습니다. –

답변

0

어쩌면 당신이 시도 할 수 :

#app/models/apartment.rb 
Class Apartment < ActiveRecord::Base 
    has_many :comments 
    scope :user, ->(id) { where("comments.user_id = ?", id } 
end 

@apartment = Apartment.find(params[:id]) 
@comments = @apartment.comments.user(user_id) 
관련 문제