Как обрабатывать ошибки ActiveSupport :: MessageVerifier :: InvalidSignature для прямых загрузок ActiveStorage - PullRequest
0 голосов
/ 03 марта 2019

У меня есть форма, где пользователь выбирает файл для загрузки.Файл загружается после выбора файла с помощью прямой загрузки ActiveStorage.Существует кнопка отправки, на которую нельзя нажать, пока загрузка не будет завершена.

Кнопка отключается при загрузке формы.Однако, если по какой-то причине пользователь смог нажать кнопку, не выбрав сначала файл, я получаю следующую ошибку в моем контроллере:

ActiveSupport::MessageVerifier::InvalidSignature - ActiveSupport::MessageVerifier::InvalidSignature:

Я хочу убедиться, что мое приложение является надежным, поэтому я хочузнаю, как справиться с этой ошибкой.

Вот мой метод контроллера:

def create
  authorize [:proofreaders, :proofread_document]
  @proofread_document = ProofreadDocument.build(proofread_document_params.merge(uploader: current_user, proofreading_job: @proofreading_job))
  if @proofread_document.save
    flash[:notice] = I18n.t('success.upload', resource: @proofread_document.file.filename)
    render :create, layout: false
  else
    render :new, layout: false
  end
end

Моя попытка справиться с этой проблемой - создать свой собственный метод 'build' и использовать его вместостандарт «новый», потому что «новый» вызывает ошибку в моем контроллере, и я хочу устранить эту проблему в модели.

Метод «сборки» в моей модели:

  def self.build(params)
    pd = self.new params.except(:file)
    pd.file = params[:file]
    pd
  rescue ActiveSupport::MessageVerifier::InvalidSignature => e
    pd
  end

Мне нужно отдельно присвоить значение атрибута файла модели, чтобы другие атрибуты были назначены до возникновения ошибки.

Это работает, поскольку возвращает экземпляр модели, которая была настроена до возникновения ошибки, ипроверка файла проверяет наличие пустого значения файла.Однако действительно ли это правильно и есть ли лучший способ, которым пользуются более опытные и опытные разработчики?

...