2016-04-26 75 views
0

我通過外連接和呈現json創建了活動記錄。當我渲染這個我沒有得到外部連接的表數據。如何獲取它如何將記錄列爲外連接活動記錄的json

@recent_details = Property 
    .includes(:space_amenities,:event_suitabilities,:purpose_suitabilities,:venue_categories) 
    .where(id: params[:id]) 
render json: @recent_details 

我這是怎麼呈現index.jbuiler.json形式

json.recent_details @recent_details 

在這裏,我得到了屬性表,除了外的所有細節連接表。如何獲得外部連接表結果

+0

是外部聯接 – SreRoR

+0

嘗試渲染JSON:Property.includes(:space_amenities,:event_suitabilities,:purpose_suitabilities,:venue_categories)。凡(ID:PARAMS [:編號])。to_json –

+0

我試着像這個。但是這一次我得到屬性細節加上只有一個連接表細節,這是最後一個(purpose_suitabilities)。任何想法如何添加所有 – SreRoR

回答

0

您需要調用類似@recent_details.frist.space_amenities的數據才能獲取數據,includes實際上會爲您查詢數據,但它不會將所有數據合併到一起。只是當您撥打@recent_details.first.space_amenities時,數據庫將不會再次查詢,因爲includes已經爲您查詢。在你的情況下,你需要指定你想添加到你的json結果的列。例如:

json.recent_details @recent_details do |rd| 
    json.space_amenities rd.space_amenities 
end 

這不會有N + 1查詢問題

如果剔除includes(:space_amenities,:event_suitabilities,:purpose_suitabilities,:venue_categories),同樣的代碼將有N + 1查詢的問題,你會在你的服務器日誌將多個SQL看查詢中用於每種recent_detail