2013-03-04 10 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 

мне интересно, что лучший способ, чтобы преобразовать поле электронной почты для выводимого URL из метода gravator.

Спасибо за помощь!

+0

Почему бы вам не рассчитать хэш (например, в 'before_save')? –

+0

Прежде всего, я могу отправить сообщение пользователю, если необходимо. Хотя я мог бы создать новое поле в базе данных, содержащее хешированное значение. – Allister

+0

Я бы добавил дополнительное поле, чтобы сохранить хэш или полный url Gravatar и предварительно рассчитать его, как сказал Серджио. Таким образом, вам не нужно будет хешировать его каждый раз, когда он отображается и все еще имеет доступ к исходному адресу электронной почты. – Bitterzoet

ответ

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 
Смежные вопросы