希望有人可以帮助我。我现在有点卡住了。我正在尝试为跟踪系统创建一个应用程序,我目前有一个名为sdel_hashed的表。在线视频之后,我到目前为止已经将digest / sha1设置为部分工作。如果我在控制台中输入以下命令:
sdel = Sdel.find(1)
sdel.hashed_sdel = Sdel.hash('secret')
sdel.save
然后在浏览器中查看它显示为哈希而不是秘密的记录,但如果我尝试通过新操作输入单词secret,则不会进行哈希处理。我认为创建动作中可能缺少某些内容,但我无法在任何地方找到答案。我非常感谢任何帮助。我现在将包括我的控制器和模型中的内容。 感谢
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
答案 0 :(得分:3)
听起来您可能希望使用before_save
过滤器在hash
模型上调用Sdel
类方法,然后在保存属性时进行修改。也许就像这样:
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_field
属性为hashed_sdel
,则会自动通过您保存记录之前的hash
类方法运行(假设属性已从之前的值更改)。