2016-04-26 17 views
0

ich erstellte aktiven Datensatz durch Outer Join und Rendering Json. Wenn ich das rendere, erhalte ich keine äußeren Tabellendaten. wie es zu holenWie Datensatz als Json für Outer Join aktiven Datensatz auflisten

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

dies ist, wie ich index.jbuiler.json Form

json.recent_details @recent_details 

hier bekam ich alle Details von Eigenschaften Tabelle mit Ausnahme der äußeren Verknüpfung Tabellen wiedergegeben. wie die äußeren verbundenen Tabelle, die Ergebnisse hier

+0

ja Outer-Joins gemacht – SreRoR

+0

versuchen json machen: Property.includes (: space_amenities,: event_suitabilities,: purpose_suitabilities,: venue_categories) .wo (id: params [: id]). to_json –

+0

ich habe versucht, wie Dies. aber diesmal bekomme ich Eigenschaften Details plus nur eine Join-Tabelle Details, die die letzte ist (purpose_uitabilities). Irgendeine Idee, wie man alle – SreRoR

Antwort

0

Sie so etwas wie @recent_details.frist.space_amenities zu nennen brauchen, um die Daten zu erhalten, die includes Abfrage tatsächlich die Daten für Sie, aber es wird nicht alle Daten miteinander verschmelzen. es ist nur, wenn Sie @recent_details.first.space_amenities aufrufen, wird die Datenbank nicht erneut abfragen, weil includes bereits für Sie abgefragt. In Ihrem Fall müssen Sie angeben, welche Spalten Sie zu Ihrem json-Ergebnis hinzufügen möchten. zum Beispiel:

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

diese haben nicht n + 1 Abfrage Problem

wenn Sie includes(:space_amenities,:event_suitabilities,:purpose_suitabilities,:venue_categories) herausnehmen, wird der gleiche Code haben n + 1 Abfrage Problem, werden Sie in Ihrem Server-Log, dass mehrere SQL sehen Abfrage für jede recent_detail