1

我正在尝试使用 password_confirmation 更新用户密码以确认它。

但是,我找不到正确更新密码的方法,我设置了密码,password=但是password_confirmation=当我查看changed?结果时,它总是返回 false。

关于如何解决这个问题的任何建议?这是我的代码(在控制器中调用了change_password,正确传递了参数我已经看到它们与打印):

class User < ActiveRecord::Base
  acts_as_authentic

  belongs_to :organization

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :organization_id, :note, :role

  validates :email, :uniqueness => true
  validates :role,  :inclusion => { :in => Rails.configuration.available_roles }

  def change_password!(pswd)
    password = pswd
    password_confirmation = pswd
    return changed? && save
  end

  def change_password(old_pswd, pswd, confirm_pswd)
    return false, 'Old password is incorrect' if !valid_password?(old_pswd, true)
    password = pswd
    password_confirmation = confirm_pswd
    # update_attributes([user: [password: pswd, password_confirmation: confirm_pswd]])
    print "--------- #{old_pswd} #{pswd} #{confirm_pswd} #{changed?.to_s} ------------"
    return changed? && save, 'New and confirm password are not correcty'
  end
end
4

1 回答 1

4

您需要self.在设置属性时使用(实际上是“设置器”辅助方法) - 否则 ruby​​ 认为您正在创建新的局部变量:

self.password = pswd
self.password_confirmation = pswd
于 2012-12-19T00:30:41.660 回答