我正在創建一個鍵的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