Tuesday, June 24, 2008

Dodanie counter cache do istniejącej tabeli

Dodanie counter cacha do isteniejącej tabeli (dla relacji jeden- wiele) rozpocząć powinniśmy od stworzenia migracji dodającej do tabeli (w obiekcie agregującym) dodatkowej kolumny. Załóżmy w tym przypadku, że w naszej aplikacji posiadamy tabele Miasta oraz tabelę powiaty. Obie są w relacji jeden-do-wielu.


class Miasto < ActiveRecord::Base
validates_presence_of :nazwa, :message => "jest wymagana"
belongs_to :powiat
end

class Powiat < ActiveRecord::Base
validates_presence_of :nazwa, :message => "jest wymagana"
has_many :miasta
end


Uwaga: jeżeli chcesz używać polskich nazw w modelach przeczytaj ten artykuł.

Zanim przejdziemy do modyfikacji tabel zaznaczmy w modelu, że chcemy używać kolumny counter_cache.


class Miasto < ActiveRecord::Base
validates_presence_of :nazwa, :message => "jest wymagana"
belongs_to :powiat, :counter_cache => true;
end


Następnie dodajmy migrację:


script/generate migration powiaty_add_counter_cache


W migracji wpisujemy następujący kod


add_column :powiaty, :miasta_count, :integer, :default => 0
Powiat.find(:all).each do |p|
Powiat.update_counters p.id, :miasta_count => p.miasta.length
end


W tym momencie nasza aplikacja będzie miała prawidłowo ustawione liczniki.

No comments: