我遇到了遗留数据库的一些棘手问题。如果我只是将db中的“password”列名更改为“encrypted_password”,那么一切似乎都能正常工作;但是,我需要保留数据库。
所以我决定使用
alias_attribute :encrypted_password, :password
现在我在控制台中出现“堆栈级太深”的错误。
我的用户模型:
class User < ActiveRecord::Base
require "digest/sha1"
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :encryptable, :encryptor => :old_cakephp_auth
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
has_many :events
before_create :add_default_values
#alias_attribute :created_at, :created
#alias_attribute :updated_at, :updated
alias_attribute :encrypted_password, :password
def add_default_values
self.created = Time.now
self.updated = Time.now
self.image = ""
self.name = self.email.split("@").first
#make normal user
self.role_id = 2
self.username = self.email.split("@").first + rand(100000000000000).to_s
self.website = ""
end
def valid_password?(password)
return false if encrypted_password.blank?
Devise.secure_compare(Digest::SHA1.hexdigest(self.password_salt+password), self.encrypted_password)
end
end
想法?谢谢!!! :)
答案 0 :(得分:2)
我想这是因为设计保留单词password
供自己使用(然后又调用encrypted_password
。尝试将其重命名为pword
并查看错误是否仍然存在如果没有,你将不得不找另一个名字来调用别名密码。
我应该说这只是一个假设。如果有帮助,请告诉我。