首页 > 解决方案 > Rails ActiveStorage 错误 - MessageVerifier-InvalidSignature

问题描述

我正在做一个需要模型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

标签: ruby-on-railsrubyrails-activestorage

解决方案


确保添加multipart: true. form_tag它生成enctype="multipart/form-data".

form_tag默认情况下不对它负责,必须拥有它(如果附加文件)。

multipart/form-data 没有字符被编码。当您使用具有文件上传控件的表单时,此值是必需的

在此处输入图像描述

形式:

<%= 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

推荐阅读