2012-03-27 63 views
2

我遇到了一些遺留數據庫稍微棘手的問題。如果我簡單地將數據庫中的「密碼」列名稱更改爲「encrypted_pa​​ssword」,一切似乎都可以正常工作;但是,我需要離開數據庫。alias_attribute和設計導致堆棧級別太深錯誤

所以我決定用

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 

想法?謝謝!!! :)

回答

2

我想,這是由於設計保留字password供自己使用(它反過來調用encrypted_password。嘗試重命名它pword,看看是否仍然出現錯誤。如果沒有,你「將不得不尋找另一個名字稱呼的別名密碼。

我應該說,這只是一個假設。讓我知道這是否有助於。

+0

所以,這給了我「NoMethodError(未定義的方法'PWORD = ...)「,這是有道理的...有任何想法的工作嗎?有沒有辦法在mysql中創建列名的別名? – Parris 2012-03-27 01:25:08

+0

我知道別名的唯一方法是你的方式一直在做克(看到這個問題的進一步信息:http://stackoverflow.com/questions/4014831/alias-for-column-names-in-rails)。你有沒有在attr_accessible中加入pword?如果你這樣做了,並且仍然出現錯誤,你可以嘗試通過暴力實現別名(手動創建get/set方法)。 – 2012-03-27 01:38:49

+0

謝謝!我的臨時解決方案,直到我們可以更改數據庫是簡單地複製db字段並將其命名爲encrypted_pa​​ssword。這似乎工作。最終密碼將被淘汰。所以我認爲我們很好。 – Parris 2012-03-27 02:01:22