A simple user model. It's using the virtual password attribute 'password' to store the clear-text password. This is what e.g. forms use for password input. It stores this password in the password_hash column.
It allows for user editing, using the same form as user creation. The password won't be updated, and validations will pass, if the user doesn't touch the password field in the form.
class User < ActiveRecord::Base
validates_confirmation_of :password, :if => :perform_password_validation?
validates_presence_of :password, :if => :perform_password_validation?
# Returns true if the password passed matches the password in the DB
self.password_hash == self.class.hash_password(password)
# Performs the actual password encryption. You want to change this salt to something else.
def self.hash_password(password, salt = "meeQue8Zucijoo7")
# Sets the hashed version of self.password to password_hash, unless it's blank.
self.password_hash = self.class.hash_password(self.password) unless self.password.blank?
# Assert wether or not the password validations should be performed. Always on new records, only on existing
# records if the .password attribute isn't blank.
self.new_record? ? true : !self.password.blank?