Rails设计编辑注册,无需密码确认,但更改密码除外

时间:2015-03-11 10:44:55

标签: ruby-on-rails ruby ruby-on-rails-3 devise forms-authentication

默认情况下,设计需要当前密码确认才能更改用户详细信息。

通过将此代码添加到我的注册控制器,我可以使其不需要此确认密码:

  protected 

  def update_resource(resource, params)
    resource.update_without_password(params)
  end

但是,我需要的是在没有当前密码确认的情况下更改有关个人资料(姓名,电子邮件,电话等)的任何信息。

同时,为了设置新密码,需要使用旧密码。

如您所见,我没有当前/旧密码列:

ActiveRecord::Schema.define(version: 20150311113109) do

  create_table "users", force: true do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "confirmation_token"
    t.datetime "confirmed_at"
    t.datetime "confirmation_sent_at"
    t.string   "unconfirmed_email"
    t.string   "first_name",                          null: false
    t.string   "last_name",                           null: false
    t.string   "telephone",                           null: false
    t.date     "birthday"
    t.text     "address"
    t.integer  "admin",                  default: 0,  null: false
    t.string   "image_file_name"
    t.string   "image_content_type"
    t.integer  "image_file_size"
    t.datetime "image_updated_at"
  end

1 个答案:

答案 0 :(得分:0)

您需要使用如下所示的proc添加验证:

class User < ActiveRecord::Base
  validates_presence_of :current_password, on: :update, :if => proc { |user| user.password.present? }
 end