2017-08-20 1 views
0

Ich habe 3 Modelle zu lösen:Wie richtig verwenden umfasst N + 1 Schiene

1) Contenttype (parent)

2) RecentTools (letzter 3 Childs von content Werkzeug ist das Modell, recent_tools nur Assoziation mit Umfang des Werkzeugs)

3) ToolTranslation (Kind-Tool)

ich möchte meine n + 1, lösen und schreiben die hierfür enthält. Gerade jetzt stucked IM:

ContentType.includes(recent_tools: :tool_translation) 

Dies sollte ich arbeiten erraten Führer accorting, aber dies schließt immer gibt mir eine vollständige Liste der Werkzeuge, statt recent_tools, und alle Übersetzungen für sie.

Das ist mein tool.rb

class Tool < ApplicationRecord 
    has_one :tool_translation, -> { where(locale: I18n.locale) }, dependent: :destroy 

    belongs_to :content_type 

    scope :recent, ->(number){ limit(number) } 
end 

Und content_type Modell:

class ContentType < ApplicationRecord 
    has_many :tools, dependent: :destroy 
    has_many :recent_tools, -> { recent(3) }, class_name: "Tool" 
end 

Wo ich fehle? Kann jemand das erklären? Vielleicht ist es eine schlechte Logik, um ein neues Werkzeug zu bekommen (es benötigt, weil ich nur 3 letzte Werkzeuge von content_type auf der Hauptseite brauche)? Wie sollte ich die Includes richtig schreiben? Vielen Dank!

+0

Versuchen 'has_many Wechsel: recent_tools, -> {letzten (3)}, class_name: "Werkzeug"' auf 'has_many: recent_tools, -> {Limit (3)}, class_name: "Werkzeug"' – Pavan

Antwort

0

Hoffnung nicht

ContentType.includes(:recent_tools, recent_tools: :tool_translation)

Bei arbeiten, lassen Sie es mich wissen.

+0

mich Rückkehr noch eine vollständige Werkzeugliste (n + 1 Abfrage überhaupt behoben, aber ich brauche nur die letzten 3 Werkzeuge, nicht alle). Ohne enthält es funktioniert gut. Auch ich bemerkte, dass, wenn ich content_type.recent_tools.count im Debugger-Modus anrief, es mir 3 zurückgab, aber wenn ich nur content_type.recent_tools mache, zeigt es mir ALLE Werkzeuge. –