07/05/07 tarihinde Ruby On Rails, activerecord, İpuçları, rails hack bölümlerinde yer almak üzere yazıldılar.
Rails ActiveRecord modülünde kaydın eklenme tarihini ve güncellenme tarihini eğer created_at|created_on ve/veya updated_at|updated_on alanlarınız var ise otomatik olarak bunlara kaydeder.
Ufak Bi’ Not:
Alanlara kaydın otomatik yapılmaması için iki yolumuz mevcut;
- ActiveRecord::Base.record_timestamps = false ile (environment.rb dosyasına ekleyerek) tüm modellerde geçerli olur.
- self.record_timestamps = false ile yazılan model için geçerli olur.
Türkçe Alan Adları
Gelelim asıl konumuza.
Artık alanlarımızı “kayit_tarihi” “guncelleme_tarihi” şeklinde oluşturarak da Rails’in bu alanlara otomatik olarak kayıt yapmasını sağlayabiliriz.
Bunun için environment.rb dosyasına aşağıdaki satırları eklemeniz gerekmektedir.
# Türkçe Tarihsel Alan Adlarını Otomatik Kaydettirici
# muarifer, http://www.ikinoktayazilim.com/wordpress
module Muarifer
module EtkinKayit
module Zaman
# önceki fonk.ları değiştirelim
def self.included(base)
base.alias_method_chain :create, :tr
base.alias_method_chain :update, :tr
end
# oluşturma tarihini otomatik kaydet
def create_with_tr
if record_timestamps
t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
write_attribute('kayit_tarihi', t) if respond_to?(*:kayit_tarihi) && kayit_tarihi.nil?
write_attribute('guncelleme_tarihi', t) if respond_to?(:guncelleme_tarihi)
end
create_with_timestamps
end
# güncelleme tarihini otomatik kaydet
def update_with_tr
if record_timestamps
t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
write_attribute('guncelleme_tarihi', t) if respond_to?(:guncelleme_tarihi)
end
update_with_timestamps
end
end
end
end
ActiveRecord::Base.class_eval {
include Muarifer::EtkinKayit::Zaman
}
# muarifer, http://www.ikinoktayazilim.com/wordpress
module Muarifer
module EtkinKayit
module Zaman
# önceki fonk.ları değiştirelim
def self.included(base)
base.alias_method_chain :create, :tr
base.alias_method_chain :update, :tr
end
# oluşturma tarihini otomatik kaydet
def create_with_tr
if record_timestamps
t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
write_attribute('kayit_tarihi', t) if respond_to?(*:kayit_tarihi) && kayit_tarihi.nil?
write_attribute('guncelleme_tarihi', t) if respond_to?(:guncelleme_tarihi)
end
create_with_timestamps
end
# güncelleme tarihini otomatik kaydet
def update_with_tr
if record_timestamps
t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
write_attribute('guncelleme_tarihi', t) if respond_to?(:guncelleme_tarihi)
end
update_with_timestamps
end
end
end
end
ActiveRecord::Base.class_eval {
include Muarifer::EtkinKayit::Zaman
}
Bir Not Daha
Kodlarımızı projeye dahil ettikten sonra created_at|created_on ve updated_at|updated_on alanları da güncellenmeye devam edecektir. Bu konuda sıkıntınız olmasın.






