在创建时没有password_confirmation但在更新期间需要它(authlogic)

时间:2010-08-12 14:02:00

标签: ruby-on-rails authlogic

我对rails很新,我使用authlogic作为我的身份验证系统。我想在用户更新他的个人资料时使用password_confirmation,但在他注册时却没有。

我想出了这个配置选项

acts_as_authentic do |c|
  c.require_password_confirmation=false
end

当我这样做时,它会在注册期间忽略password_confirmation(这很好),但在编辑用户配置文件时,我希望它考虑password_confirmation字段。有什么方法可以配置吗?

1 个答案:

答案 0 :(得分:1)

当您暂停基于Authlogic的验证时,您可以使用标准的Rails模型验证来实现此目的,例如:

validates_presence_of :password_confirmation, :if => :password_required?

其中password_required?是一个可选的模型方法,它测试您是否希望对给定方案进行此验证。

<强>更新

由于似乎c.require_password_confirmation=false选项意味着不再自动创建password_confirmation属性,因此您需要稍微改变解决方案。手动创建虚拟属性,并针对配置文件更新的特定情况进行自定义验证。像这样:

class User < ActiveRecord::Base
  attr_accessor :password_confirmation

  validate do |user|
    unless user.new_record?
      user.errors.add :password, "is required" if self.password.blank?
      user.errors.add :password_confirmation, "is required" if self.password_confirmation.blank?
      user.errors.add_to_base, "Password and confirmation must match" if self.password != self.password_confirmation
    end
  end
end