Rails ActiveStorage Ошибка - MessageVerifier-InvalidSignature - PullRequest
0 голосов
/ 23 мая 2018

Я работаю над проектом, который требует ActiveStorage has_many_attached :photos ситуации на Location модели.

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

ActiveSupport::MessageVerifier::InvalidSignature in 
                                 LocationsController#attach_photo

Это способ «добавить» файл в набор вложений для конкретной родительской записи (т. е. Location запись)?

Location Модель

class Location < ApplicationRecord
  ...
  has_many_attached :photos
  ...
end

Контроллер местоположений

class LocationsController < ApplicationController
  ...
  def attach_photo
    @location = Location.find(params[:id])
    @location.photos.attach(params[:photo])
    redirect_to location_path(@location)
  end
  ...
end

Вид

<%= form_tag attach_photo_location_path(@location) do %>
  <%= label_tag :photo %>
  <%= file_field_tag :photo %>

  <%= submit_tag "Upload" %>
<% end %>

Вид

resources :locations do
  member do
    post :attach_photo
  end
end

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Обязательно добавьте multipart: true в form_tag.Он генерирует enctype="multipart/form-data".

form_tag по умолчанию не несет за него ответственности, должен иметь его (при прикреплении файла).

multipart / form-data Никакие символы не закодированы,Это значение требуется при использовании форм с элементом управления загрузкой файлов

enter image description here

Форма:

<%= form_tag attach_photo_location_path(@location), method: :put, multipart: true do %>
  <%= label_tag :photo %>
  <%= file_field_tag :photo %>

  <%= submit_tag "Upload" %>
<% end %>

Также:

Измените post на put метод, мы обновляем не создавая Идемпотентность

resources :locations do
  member do
    put :attach_photo
  end
end
0 голосов
/ 30 июня 2018

Вам необходимо назначить подпись (в params[:signed_blob_id]) экземпляру, как показано в примере из документов .

Итак, вот так:

@location.photos.attach(params[:signed_blob_id]) # Signed reference to blob from direct upload
...