我正在创建一个键的Rails 4应用程序,将其散列在before_create上并将其保存在模型中。如果我想重置此密钥,我可以调用current_user.touch并调用before_update,并且before_update与before_create具有相同的方法,因此旧密钥将更新为新密钥。我想在创建时获取纯文本密钥,所以我使用attr_accessor并在创建时使用纯文本填充变量,然后返回无损的密钥。问题是,如果我打电话,更新!我返回真或假而不是记录,所以我不能访问attr_accessor变量,如果我尝试重新加载它,那么键已经消失,因为它只在实例中可用。有没有人知道强制更新并在该实例中返回记录本身的方法,而不是真或假?Rails触摸并返回attr_accessor
class Key < ActiveRecord::Base
include BCrypt
attr_accessor :access_key_hex
before_update :set_access_key
before_create :set_access_key
def access_key
@access_key ||= Password.new(access_key_hash)
end
belongs_to :user
protected
def set_access_key
self.access_key_hex = SecureRandom.hex(50)
@access_key = Password.create(access_key_hex)
self.access_key_hash = @access_key
end
end
在我的控制器中我使用@key = active_user.key.update!(nil)
,它完美的作品,它会自动更新的关键,问题是在获取更新的关键,在创造它的罚款。
你可以发布你的模型代码吗? – zeantsoi
@zeantsoi完成。 – ny95
作为供参考,您可以通过使用'after_save'回调来干掉你的代码,这个回调包含'before_create'和'before_update'。 – zeantsoi