1

アプリへのログイン中に「不明な属性: パスワード」というエラーが表示されました。パスワードが保存されていないようです。私はレールを初めて使用します。これについて誰か助けてもらえますか?

これは、アプリの実行中に表示されるメッセージです。以下は、モデル ファイルと制御ファイルのコードです。ActiveRecord::UsersController#create の UnknownAttributeError

不明な属性: パスワード

ログイン/パスワード Web アプリを作成しようとしています。アプリの実行中に次のエラーが発生します。undefined method encrypt_pasword' app/models/user.rb:32:inpassword=' app/controllers/users_controller.rb:43:in new' app/controllers/users_controller.rb:43:increate'

制御ファイルのコードは次のとおりです。

require 'digest/sha2'
class User < ActiveRecord::Base
  include ActiveModel::MassAssignmentSecurity

  attr_accessible :name, :password, :password_confirmation, :hashed_password, :salt
  attr_accessor :name
  attr_accessor :salt

  validates :name, :presence => true, :uniqueness => true
  validates :password, :confirmation => true
  attr_accessor :password_confirmation
  attr_reader  :password

  validate :password_must_be_present

  def User.authenticate(name, password)
    if user = find_by_name(name)
      if user.hashed_password == encrypt_password(password, user.salt)
        user
      end
    end
  end

  def User.encrypt_password(password, salt)
    Digest::SHA2.hexdigest(password + "wibble" + salt)
  end
  # 'password' is a virtual attribute
  def password=(password)
    @password =password
    if password.present?
      generate_salt
      self.hashed_password =self.class.encrypt_password(password, salt)
    end
  end
  private

  def password_must_be_present
    errors.add(:password, "Missing password") unless hashed_password.present?
  end

  def generate_salt
    self.salt = self.object_id.to_s + rand.to_s
  end

end

ここに私のモデルファイルがあります

require 'digest/sha2'
class User < ActiveRecord::Base
  include ActiveModel::MassAssignmentSecurity

  attr_accessible :name, :password, :password_confirmation, :hashed_password, :salt
  attr_accessor :name
  attr_accessor :salt
  attr_accessor :password

  validates :name, :presence => true, :uniqueness => true
  validates :password, :confirmation => true
  attr_accessor :password_confirmation
  attr_reader  :password

  validate :password_must_be_present

     def encrypt_password
         self.encrypted_password 
    end

       def User.authenticate(name, password)
    if user = find_by_name(name)
      if user.hashed_password == encrypt_password(password, user.salt)
        user
      end
    end
  end

  def User.encrypt_password(password, salt)
    Digest::SHA2.hexdigest(password + "wibble" + salt)
  end
  private 
    def encrypt_password
      self.salt = make_salt if new_record?
      self.encrypted_password = encrypt(password)
    end

  # 'password' is a virtual attribute
  def password=(password)
    @password =password
    if password.present?
      generate_salt
      self.hashed_password =self.class.encrypt_password(password, salt)
    end
  end

  private

  def password_must_be_present
    errors.add(:password, "Missing password") unless hashed_password.present?
  end

  def generate_salt
    self.salt = self.object_id.to_s + rand.to_s
  end

end
4

1 に答える 1

2

encrypt_pasword に s がありません。

于 2012-07-31T22:42:54.827 に答える