2017-02-20 6 views
0

Ich möchte eine Dropdown mit Baumstruktur zeigen. Durch die Verwendung this SO Lösung von @manoj, zeigt der Code für category_options_array den Baum wunderbar im Select-Formular-Steuerelement für ein Modell mit weniger Einträge, aber ein anderes Modell, das ungefähr 30 Eltern-IDs und einige davon mit 1-Level-Tiefe hat, stürzt ab. In der Tat, selbst wenn es für etwa 20 parent_ids verwendet, führt es 20 SQL-Abfragen, die nur für eine Dropdown-Steuerelement zu viel ist.Rails Optimieren Baumstruktur Code durch eifrig Laden

Ich habe versucht, es in einen Cache zu sammeln - wie diese

@categories = Category.where('parent_id = ? AND id != ?', parent_id, current_id).order(:name) 
@categories.each do |c| ..... 

jedoch läuft es gleiche 20 SQL-Abfragen und 20-Cache.

Wenn ich lese eifrig lade es ist in der Regel für eine Join-Bedingung und ich konnte kein Beispiel für ein einzelnes Modell finden.Kann es durch eifriges Laden/Any-anderen-Weg zu Abfrage einmal ausgeführt werden und Anordnung Array zur Anzeige zu optimieren TIA.

Antwort

0

Es ist schwer, eine genaue Antwort in Code zu geben, ohne zu sehen, wie Ihr Modell der Datenstruktur eingerichtet ist, aber im Allgemeinen kann man eine „enthält“ Anweisung eifrig Last verwenden, die auch Verschachtelung unterstützen:

http://apidock.com/rails/ActiveRecord/QueryMethods/includes

Wie sehen die Abfragen aus, wenn Sie das Untermodell einschließen?

+0

Es läuft so viele Select-Abfragen wie es Kategorie Datensätze gibt und sogar nach dem Sammeln in einem Hash @ Kategorien alle es läuft ... seltsam !! Das Kategoriemodell ist: name: string, parent_id: integer (Standardwert = 0) – Means

+0

Können Sie einen Gedanken mit Ihren Modelldefinitionen posten? – MBHNYC