我有这段代码,但我不确定是怎么回事?
它验证密码,但它如何做到这一点?
我知道attr_reader和访问器是什么,但并不真正理解datamapper如何将密码与:password_confirmation进行比较?datamapper在执行什么魔术?
这是我的用户模型:
require 'data_mapper'
require 'dm-postgres-adapter'
require 'bcrypt'
class User
include BCrypt
include DataMapper::Resource
property :id, Serial
property :username, String
property :email, String
property :password_digest, Text
validates_confirmation_of :password
attr_reader :password
attr_accessor :password_confirmation
def password=(password)
@password = password
self.password_digest = BCrypt::Password.create(password)
end
end这是我的管理员的帖子:
post '/sign-up' do
new_user = User.create(:username => params[:username], :email => params[:email], :password => params[:password], :password_confirmation => params[:password_confirmation])
session[:user_id] = new_user.id
redirect '/welcome'
end发布于 2016-09-08 14:21:50
好吧,这是文档 for validates_confirmation_of
“神奇”的发生只是数据映射程序将搜索一个与您在validates_confirmation_of中传递的字段同名的字段(在本例中是:password),并验证它们是否相等。
例如,validates_confirmation_of :email将使datamapper查找属性email_confirmation,并比较它是否等于:email。
attr_reader和attr_accessor
attr_reader和attr_acessor只是定义方法和实例变量的“捷径”。
attr_reader:创建一个获取属性的方法attr_writer:创建一个设置属性的方法attr_accessor:创建两个例如:
class Person
attr_reader :name
attr_accessor :gender
end是同一件事:
class Person
def name
@name
end
def gender=(gender)
@gender = gender
end
def gender
@gender
end
endhttps://stackoverflow.com/questions/39393001
复制相似问题