我认为这是一个简单的问题。到目前为止,我已经
了 rails generate scaffold User username:string email:string password:string
为User模型创建一个新的脚手架。以下是我的user.rb
:
class User < ActiveRecord::Base
validates :username, presence: true, length: { in: 2..50 }, uniqueness: true
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: true
validates :password, presence: true, length: { in: 4..50}
#self.password = 'abcd' #I can't even change the parameter to something hard-coded!
end
我已经写了一些测试,但效果很好。我的下一步是将password
参数放入一个哈希函数(我想自己编写用于教育目的)并保存这个新修改的字符串而不是原始字符串。我似乎不明白该怎么做?我是否在user.rb
中创建了一个方法,该方法是从users_controllers.rb
方法下的create
调用的?
我想通过执行rails console --sandbox
并编写一些测试来测试这一点。
答案 0 :(得分:2)
您可以使用before_save回调
# user.rb model
before_save :hash_password
def hash_password
self.password = some_hash_function(self.password)
end
您必须小心使用此方法不要多次散列密码。也就是说,您必须始终散列清除密码,而不是散列散列版本。这就是为什么我会这样做并调用字段password_digest并仅在设置密码属性时散列密码。
# user.rb model
attr_accessor :password
before_save :hash_password
def hash_password
self.password_digest = some_hash_function(self.password) unless self.password.blank?
end
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html