アプリへのログイン中に「不明な属性: パスワード」というエラーが表示されました。パスワードが保存されていないようです。私はレールを初めて使用します。これについて誰か助けてもらえますか?
これは、アプリの実行中に表示されるメッセージです。以下は、モデル ファイルと制御ファイルのコードです。ActiveRecord::UsersController#create の UnknownAttributeError
不明な属性: パスワード
ログイン/パスワード Web アプリを作成しようとしています。アプリの実行中に次のエラーが発生します。undefined method encrypt_pasword'
app/models/user.rb:32:in
password=' app/controllers/users_controller.rb:43:in new'
app/controllers/users_controller.rb:43:in
create'
制御ファイルのコードは次のとおりです。
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