簡體   English   中英

Rails SHA1哈希生成器

[英]Rails sha1 hash generator

您好,希望有人能幫助我。 我現在有點卡住。 我正在嘗試為跟蹤系統創建一個應用程序,目前我有一個名為sdel_hashed的表。 到目前為止,在觀看在線視頻之后,我將digest / sha1設置為部分工作。 如果我在控制台中輸入以下命令:

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

然后在瀏覽器中查看記錄,它顯示為哈希而不是秘密,但是如果我嘗試通過新操作輸入“秘密”一詞,則不會被哈希。 我認為create操作中可能缺少一些東西,但是我找不到任何地方的答案。 我將不勝感激任何幫助。 現在,我將包含控制器和模型中的內容。 謝謝

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

聽起來好像您想在屬性修改后保存之前,使用before_save過濾器在Sdel模型上調用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

這樣,如果您的表單的hashed_sdel屬性具有text_field ,它將自動通過保存記錄之前的hash類方法運行(假設屬性已更改為先前值)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM