首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >validates_confirmation_of :密码

validates_confirmation_of :密码
EN

Stack Overflow用户
提问于 2016-09-08 14:01:19
回答 1查看 1.2K关注 0票数 2

我有这段代码,但我不确定是怎么回事?

它验证密码,但它如何做到这一点?

我知道attr_reader和访问器是什么,但并不真正理解datamapper如何将密码与:password_confirmation进行比较?datamapper在执行什么魔术?

这是我的用户模型:

代码语言:javascript
复制
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

这是我的管理员的帖子:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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_readerattr_acessor只是定义方法和实例变量的“捷径”。

  • attr_reader:创建一个获取属性的方法
  • attr_writer:创建一个设置属性的方法
  • attr_accessor:创建两个

例如:

代码语言:javascript
复制
class Person

   attr_reader :name
   attr_accessor :gender

end

是同一件事:

代码语言:javascript
复制
class Person

  def name
    @name
  end

  def gender=(gender)
    @gender = gender
  end

  def gender
    @gender
  end

end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39393001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档