При использовании attr_accessor я понимаю, что вы в основном создаете читателя и писателя, поэтому:
attr_accessor :password
равно
#Reader
def password
@password
end
#Writer
def password=(pwd)
write_attribute( :password, pwd )
end
В таких случаях, когда вам нужно изменить поле перед сохранением информации о модели в БД, вам просто нужно вручную создать модуль записи и изменить его так, как вы хотите ... так что в этом случае возьмите метод записи и используйте его создать соль и зашифровать ... что-то вроде:
def password=(pwd)
@password = pwd
return if pwd.blank?
create_new_salt
self.password_md5_hash = User.encrypted_password(self.password, self.salt)
end
Примеры методов, использованных выше:
def create_new_salt
self.salt = "#{object_id}#{rand}"
end
def self.encrypted_password(password, salt)
hashme = password + "morerandomtexthere" + salt
Digest::SHA1.hexdigest(hashme)
end
Также, для date_time_created, просто используйте "t.timestamps" в вашей миграции, и если я не ошибаюсь, Rails будет обрабатывать их для вас.