使用相同的图像更新模型时,ActiveSupport :: MessageVerifier :: InvalidSignature错误

时间:2018-11-05 16:52:28

标签: ruby-on-rails rails-api

我不知道更新包含附件图像的模型而不更改图像时出现错误的原因:

Processing by PostsController#update as JSONAPI
  Parameters: {"data"=>{"id"=>"28", "attributes"=>{"title"=>"post-1", "body"=>"azertyui", "archived"=>true, "tag_ids"=>[11, 12, 13], "photo"=>"http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBFZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--86e7464f36c2eddf776573af7b9e61d969287158/diagram.png"}, "type"=>"posts"}, "id"=>"28"}

我得到的错误如下:

Completed 500 Internal Server Error in 5ms (ActiveRecord: 0.5ms)
ActiveSupport::MessageVerifier::InvalidSignature (ActiveSupport::MessageVerifier::InvalidSignature):
app/controllers/posts_controller.rb:30:in `update'

这是控制器更新操作代码:

def update
    if @post.update(post_params)
      render json: @post
    else
      respond_with_errors @post
    end
  end

PostSerializer的外观如下:

class PostSerializer < ActiveModel::Serializer
  include Rails.application.routes.url_helpers

  attributes :id, :title, :body, :tag_ids, :archived, :photo

  def photo
    rails_blob_url(object.photo) if object.photo.attached?
  end
end

我正在使用Rails 5.2.0 API。我想念什么?

2 个答案:

答案 0 :(得分:0)

当系统期望文件Blob时,如果您传递字符串,则会发生上述错误。您可以通过检测params[:photo]是字符串还是文件来解决该错误,并且仅在它是文件时才附加。

答案 1 :(得分:0)

我遇到了完全相同的问题,通过向我的表单元素添加 enctype="multipart/form-data" 已解决。

答案在这里https://stackoverflow.com/a/5628027/12910375