2013-03-04 56 views
1

我正在尋找MD5在從Rails模型輸出之前散列電子郵件地址。目前我的模式看起來像這樣:輸出之前的散列值

class Comment < ActiveRecord::Base 
    belongs_to :post 
    attr_accessible :body, :name, :reply, :email 
    validates_presence_of :body, :name 

    def gravator 
     require 'digest/md5' 

     email_address = self.email.downcase 

     # create the md5 hash 
     hash = Digest::MD5.hexdigest(email_address) 

     # compile URL which can be used in <img src="RIGHT_HERE"... 
     self.email = "http://www.gravatar.com/avatar/#{hash}" 

    end 
end 

我想知道什麼是最好的方式,以電子郵件字段從gravator方法轉化爲輸出的URL。

感謝您的幫助!

+0

爲什麼不預先計算散列(例如'before_save')? – 2013-03-04 12:20:25

+0

主要是我可以在需要時通過電子郵件發回給用戶。儘管我可以在包含哈希值的數據庫中創建一個新字段。 – Allister 2013-03-04 12:22:12

+0

我會添加一個額外的字段來保存哈希或完整的Gravatar網址,並像塞爾吉奧所說的那樣預先計算它。這樣,每次顯示時都不需要對其進行散列,並且仍然可以訪問原始電子郵件地址。 – Bitterzoet 2013-03-04 12:28:41

回答

0

不是每次散列它,而是在數據庫中創建一個包含哈希值的新字段。

0

創建一個gravator字段並將其分配到before_save。這會加快速度,並且每次顯示時都不會調用數據庫。

class Comment < ActiveRecord::Base 
    belongs_to :post 
    attr_accessible :body, :name, :reply, :email 
    validates_presence_of :body, :name 
    before_save :set_gravator 

    def set_gravator 
     require 'digest/md5' 

     email_address = self.email.downcase 

     # create the md5 hash 
     hash = Digest::MD5.hexdigest(email_address) 

     # compile URL which can be used in <img src="RIGHT_HERE"... 
     self.gravator = "http://www.gravatar.com/avatar/#{hash}" 
    end 
end