Я работаю над приложением Rails 4, которое создает ключ, хэширует его на before_create и сохраняет его в модели. Если я хочу сбросить этот ключ, я могу вызвать current_user.touch и будет вызываться before_update, а before_update будет иметь те же методы, что и before_create, поэтому старый ключ будет обновлен новым. Я хочу получить этот простой текстовый ключ для создания, поэтому я использую attr_accessor и заполняю переменную простым текстом при создании, и я возвращаю ключ, который в порядке. Проблема в том, что если я назову touch, обновите! Я верю true или false вместо записи, поэтому я не могу получить доступ к переменной attr_accessor, и если я попытаюсь перезагрузить ее, тогда ключ исчезнет, потому что он доступен только в экземпляре. Кто-нибудь знает способ принудительного и обновления и возврата самой записи в этом экземпляре вместо истинного или ложного?Rails Touch and Return 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
Как FYI, вы, возможно, можете СУБДИТЬ свой код, используя обратный вызов 'after_save', который включает как' before_create', так и 'before_update'. – zeantsoi