1

password_confirmation を使用してユーザーパスワードを更新して確認しようとしています。

ただし、パスワードを正しく更新する方法が見つかりません。and でパスワードを設定しまし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 に答える