Schienen Eager Laden auf alle Finds
-
19-09-2019 - |
Frage
OK, ich habe mit einigen der eifrigen Laden Dinge herum spielen, und habe 2 Modelle so etwas wie:
Class Recipe < ActiveRecord::Base
belongs_to :cookbook
has_many :recipetags
end
und
Class Cookbook < ActiveRecord::Base
has_many :recipes, :include => [:recipetags]
end
Welche funktioniert gut aus, wenn ich ein Kochbuch finden, dann lädt ich eifrig die Rezepte, und in den Rezepten eifrig Last drehen: recipetags:
cb = Cookbook.find(10590, :include => [:recipes])
Aber was will ich auch tun ist, wenn ich ein Rezept zu öffnen, haben sie ziehen in alle automatisch eifrig Verbände ist - im Grunde was ich tun möchte:
rec = Recipe.find(123)
und hat es eifrig Last des:. Recipetags in diesem Fall auch
Ich weiß, dies trivial erscheint, aber in Wirklichkeit habe ich etwa 4-5 Assoziationen auf Rezept, zeige ich sie nur nicht hier, und anstatt auf die explizit tun: include auf jedem Fund nenne ich es möchte nur passieren. Ich gehe davon aus ich kann Recipe.find außer Kraft setzen es in dem Rezept Modell zu tun, aber frage mich, ob es ein sauberer Weg war ....
Lösung
Ich habe mit default_scope es tun bei ausgewählten Modellen, wo ich will eifrig Last immer:
class Post < ActiveRecord::Base
has_many :comments
default_scope :include => :comments, :order => ["title ASC"]
...
end
Andere Tipps
Sie sollten Lage sein, dies mit Scopes zu tun, aber ich verstehe, dass es eine Reihe von möglichen Fehlern mit, dass war, hoffentlich sie nun alle fest sind.