web-dev-qa-db-ja.com

Rails ActiveStorageエラー-MessageVerifier-InvalidSignature

ActiveStorageモデルでLocationhas_many_attached :photosシチュエーションを必要とするプロジェクトに取り組んでいます。

以下にコードを設定しましたが、フォームをアップロードしようとすると、次のエラーが表示されます。

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
7
slehmann36

必ずmultipart: trueform_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 %>

また:

postputメソッドに変更します。作成せずに更新しています べき等

resources :locations do
  member do
    put :attach_photo
  end
end
10
7urkm3n

署名を割り当てる必要があります(params[:signed_blob_id]docs からの例が示すようにインスタンスに。

だから、このように:

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