Eager loading - ładowanie modelu z powiązanymi danymi
Wysłane przez Krzysztof Kempiński dnia 01.09.2007
Eager loading, to metoda pozwalająca załadować określone dane powiązane z modelem. Oznacza to, że jest możliwe zaczytanie danych połączonych określoną relacją tylko raz, podczas tworzenia obiektu modelu, a nie za każdym razem kiedy odwołujemy się do którejś z relacji.Żeby to zobrazować przedstawię krótki przykład kodu. Wyobraźmy sobie, iż mamy model Product, który jest powiązany relację has_many z modelem Comment (produkt posiada wiele komentarzy)
class Product < ActiveRecord::Base has_many :comments end
@products = Product.find(:all)
<% for product in @products %> <%= product.name %> (komentarzy: <%= product.comments.length %>) <br /> <% end %>
Zamiast tego możemy zastosować eager loading. Zmodyfikujemy nieco pobieranie produktów:
@products = Product.find(:all, :include => :comments)
Jeśli nasz model Product posiadałby jeszcze inne relacje, np. byłby powiązany z Rating, moglibyśmy je również załadować automatycznie, stosując tablicę:
@products = Product.find(:all, :include => [:comments, :ratings])
belongs_to :category
@products = Product.find(:all, :include => [:comments, :category])
