将current_password字段添加到以下更改密码视图?

时间:2013-01-16 10:46:23

标签: ruby-on-rails

我有一个用户模型,我使用Rails has_secure_password构建(基于Rails tutorial Book):

schema.rb:

create_table "users", :force => true do |t|
  t.string   "password_digest"
end

user.rb:

class User < ActiveRecord::Base
  attr_accessible :name, :email, :avatar, :password, :password_confirmation, :provider, :uid

  has_secure_password

  validates :password, presence: true, length: { minimum: 6 }
  validates :password_confirmation, presence: true

我有这样的观点uses/password_edit.html.erb

<%= f.label :password %>
<%= f.password_field :password, "New Password" %>

<%= f.label :password_confirmation, "Retype Password" %>
<%= f.password_field :password_confirmation %>

现在,我想在顶部添加:current_password字段。问题是数据库只有password_digest列。

所以,我在这里有点迷失。 <{1}}不正确时,我甚至不确定如何使表单抛出错误。

有什么建议吗?

编辑:

users_controller.html.erb:

def更新     old_password = params [:current_password]

current_password

1 个答案:

答案 0 :(得分:1)

我最近做了类似的事。我在视图中添加了一个与模型无关的输入,然后我的控制器看起来像这样:

def update
  old_password = params[:current_password]

  @user = User.find(params[:id])

  if authenticated = @user.authenticate(old_password)
    if params[:user][:password].blank? && params[:user][:password_confirmation].blank?
      # Use old password if none indicated
      params[:user][:password] = old_password
      params[:user][:password_confirmation] = old_password
    end
  end

  @user.errors.add(:base, "Invalid password") unless authenticated

  if authenticated && @user.update_attributes(params[:user])
  ...
end

它似乎对我有用。我希望它可以帮助你。