2014-02-24 143 views
0

我想實現的東西,需要在SQL上完全3秒,我掙扎了好幾個小時,我想加載所有記錄,如果存在,如果沒有,則加入左連接給我相關的模型。rails加入關聯和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評論.'? – 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)