... spezialisiert auf professionelles Webdesign
für kleine und mittelständische Unternehmen.
Von der Beratung und Konzeption, über das Design, bis hin zur Programmierung, stehe ich Ihnen auch nach dem Onlinegang mit Pflege und Wartung ihres Internetauftritts zur Seite.
Werfen Sie einen Blick auf meine Referenzen und zögern Sie nicht bei Interesse telefonisch oder per e-Mail mit mir Kontakt aufzunehmen.
Hier mal ein kleiner Performance Tipp wie man sich ein paar Datenbank Abfragen sparen kann.
Hat man zum Beispiel eine Tabelle galleries und eine Tabelle photos. Kann man sich bei der Abfrage wie viele Photos eine Galerie besitzt, die Count Abfrage sparen wenn man den Counter-Cache nutzt.
Hintergrund: Zur galleries Tabelle wird ein neues Feld photos_count hinzugefügt. Diese Feld wird automatisch aktualisiert wenn man ein Photo hinzufügt oder löscht.
Nun könnte man hier auch einen Observer schreiben der genau dies tut, aber mit dem Counter-Cache spart man sich eine Menge Arbeit und hat einen Vorteil:
Active Record greift automatisch bei der Abfrage gallery.photos.size auf das photos_count Feld zu und löst keine Count Abfrage im Hintergrund aus. Nehmen wir eine Galerie-Ansicht mit 25 Galerien spart das 25 Abfragen.
Kommen wir nun zu Umsetzung. Als erstes erstellen wir eine Migration die uns das Feld photos_count zur galleries Tabelle hinzufügt. Gehen wir mal davon aus, dass es schon Galerien und Photos gibt und wir das photos_count Feld noch auf den richtigen Wert setzen müssen.
class AddPhotosCountToGalleries < ActiveRecord::Migration
def self.up
add_column :galleries, :photos_count, :integer, :default => 0
Gallery.reset_column_information
Gallery.all.each do |g|
Gallery.update_counters g.id, :photos_count => g.photos.count
end
end
def self.down
remove_column :galleries, :photos_count
end
end
Danach fügen wir zum Photo-Model noch den Counter-Cache hinzu.
photo.rb
belongs_to :gallery, :counter_cache => true
Und fertig ist der Counter-Cache für unsere Galerie.
Eines gilt es zu beachten:
gallery.photos.size
… nutzt den Counter-Cache
gallery.photos.length
… lädt alle Photos in Array und ruft auf dem Array die .length Methode auf.
gallery.photos.count
… führt eine Count Abfrage aus
Man sollte also immer bei der Planung an das Counter-Cache Feld denken.
Noch keine Kommentare vorhanden.