Rails 2.2.2
Ruby 1.8.5
I am attempting to extend AR with a generalized audit attribute setter.
I have written this code, which does not work for reasons unknown to me.
Perhaps someone here can explain why it does not.
Put this in config/initializer as active_record_addins.rb
module ActiveRecord
module HLLAuditStamps
def self.included(base)
super
# alias_method_chain :create, :audit
# is the same as:
# alias_method :create_without_audit, :create
# alias_method :create, :create_with_audit
base.alias_method_chain :create, :audit
base.alias_method_chain :update, :audit
end
private
def create_with_audit
write_audit_fields
# Now we call our alias to the original method
create_without_audit
end
def normal_time_now
if base.class.default_timezone == :utc
return DateTime.now.utc
else
return DateTime.now
end
end
def update_with_audit
write_audit_fields
update_without_audit
end
def write_audit_fields
write_attribute('accessed_at', normal_time_now) if \
respond_to?('accessed_at')
write_attribute('accessed_on', normal_time_now) if \
respond_to?('accessed_on')
end
end
end
What I intend is that whenever the AR create or update method is called
then the attributes specified in write_audit_fields are set to the value
provided by normal_time_now. They are not and I cannot tell why.
Any suggestions as to what I am doing wrong?