【问题标题】:Rails sha1 hash generatorRails sha1 哈希生成器
【发布时间】:2013-09-18 14:46:18
【问题描述】:

您好,希望有人可以帮助我。我现在有点卡住了。我正在尝试为跟踪系统创建一个应用程序,我目前有一个名为 sdel_hashed 的表。到目前为止,我按照在线视频设置了 digest/sha1 以部分工作。如果我在控制台中输入以下命令:

sdel = Sdel.find(1)
sdel.hashed_sdel = Sdel.hash('secret')
sdel.save

然后在浏览器中查看记录,它显示为哈希而不是秘密,但如果我尝试通过新操作输入秘密一词,它不会被哈希。我认为创建操作中可能缺少某些内容,但我无法在任何地方找到答案。我将不胜感激任何帮助。我现在将包括我的控制器和模型中的内容。 谢谢

model sdel

require 'digest/sha1'
class Sdel < ActiveRecord::Base
  attr_accessible :hashed_sdel

  def self.hash(sdel="")
     Digest::SHA1.hexdigest(sdel)
  end

end

controller sdels

class SdelsController < ApplicationController
  def list
    @sdel = Sdel.all
  end

  def new
    @sdel = Sdel.new
  end

  def create
    @sdel = Sdel.new(params[:sdel])
    if @sdel.save
      redirect_to(:action => 'list')
    else
      render('new')
    end
  end
end

迁移文件

class CreateSdels < ActiveRecord::Migration
  def change
    create_table :sdels do |t|
      t.string "hashed_sdel"
      t.timestamps
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails hash sha1 digest


    【解决方案1】:

    听起来您可能希望使用before_save 过滤器来调用hash 模型上的hash 类方法,然后再保存修改属性时。也许是这样的:

    require 'digest/sha1'
    
    class Sdel < ActiveRecord::Base
      attr_accessible :hashed_sdel
    
      before_save { self.hashed_sdel = self.class.hash(hashed_sdel) if hashed_sdel_changed? }
    
      def self.hash(sdel="")
        Digest::SHA1.hexdigest(sdel)
      end
    end
    

    这样,如果您的表单具有 text_fieldhashed_sdel 属性,它将自动通过您之前拥有的 hash 类方法运行记录被保存(假设属性已更改从它以前的值)。

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 2014-02-26
      • 2014-03-20
      • 1970-01-01
      • 2016-10-27
      • 2011-08-16
      • 1970-01-01
      • 2021-12-13
      • 2014-10-01
      相关资源
      最近更新 更多