sle*_*n36 6 ruby ruby-on-rails rails-activestorage
我正在开发一个需要模型ActiveStorage has_many_attached :photos情况的项目Location.
我在下面设置了代码,但在尝试上传表单时,收到以下错误:
ActiveSupport::MessageVerifier::InvalidSignature in
LocationsController#attach_photo
Run Code Online (Sandbox Code Playgroud)
这是将文件"添加"到特定父记录(即:Location记录)的附件集的方法吗?
Location 模型class Location < ApplicationRecord
...
has_many_attached :photos
...
end
Run Code Online (Sandbox Code Playgroud)
class LocationsController < ApplicationController
...
def attach_photo
@location = Location.find(params[:id])
@location.photos.attach(params[:photo])
redirect_to location_path(@location)
end
...
end
Run Code Online (Sandbox Code Playgroud)
<%= form_tag attach_photo_location_path(@location) do %>
<%= label_tag :photo %>
<%= file_field_tag :photo %>
<%= submit_tag "Upload" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
resources :locations do
member do
post :attach_photo
end
end
Run Code Online (Sandbox Code Playgroud)
7ur*_*m3n 10
确保添加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 %>
Run Code Online (Sandbox Code Playgroud)
也:
更改post为put方法,我们正在更新不创建Idempotency
resources :locations do
member do
put :attach_photo
end
end
Run Code Online (Sandbox Code Playgroud)
小智 2
您需要将签名(在 中params[:signed_blob_id])分配给实例,如文档中的示例所示。
所以,像这样:
@location.photos.attach(params[:signed_blob_id]) # Signed reference to blob from direct upload
Run Code Online (Sandbox Code Playgroud)