尝试使用活动存储上载文件时,无法在Rails控制器中允许:file参数

问题描述

我遇到了一个前所未有的奇怪问题,即在设置活动存储时从未出现过,而在我的控制器中不允许使用文件参数。

这是我的模特

class Upload < ApplicationRecord
  has_one_attached :file
  # ...removed for brevity
end

以及控制器中的create方法

class Api::V1::Agent::UploadsController < Api::V1::AgentController
  # ...removed for brevity

  # POST /uploads
  def create
    @upload = Upload.new(upload_params)

    if @upload.save
      render json: @upload,status: :created,location: @upload
    else
      render json: @upload.errors,status: :unprocessable_entity
    end
  end

  private

    # Only allow a trusted parameter "white list" through.
    def upload_params
      params.require(:upload).permit(:company_id,:employee_id,:title,:tags,:secure,:file)
    end
end

这是调用requirepermit之前params对象的外观。

<ActionController::Parameters {"company_id"=>1,"employee_id"=>"","title"=>"Testing","file"=>{"rawFile"=>{"path"=>"teams-icon.png"},"src"=>"blob:http://localhost:3000/cee6f897-8a93-4e27-ab8e-724e6ec60f29","title"=>"teams-icon.png"},"format"=>:json,"controller"=>"api/v1/agent/uploads","action"=>"create","upload"=><ActionController::Parameters {"company_id"=>1,"title"=>"Testing s3 storage"} permitted: false>} permitted: false>

然后

<ActionController::Parameters {"company_id"=>1,"title"=>"Testing s3 storage"} permitted: true>

如果我在#create中抛出一个Pry断点,我可以调用@upload.file并查看虚拟文件属性,但由于某些原因,不允许使用:file参数。

编辑:

我试图像params.require(:upload).permit(file: {})一样允许文件参数为哈希,并且得到相同的结果。

我还尝试将文件作为blob url字符串提交(例如{"company_id"=>1,"file"=>"blob:http://localhost:3000/1e72ade4-97fc-4535-88e9-45884bcd9633"}而不是嵌套的哈希,但是:file仍从允许的参数中删除

解决方法

params [:file]是一个散列,因此您必须使用一些不同的方式来允许它

params.require(:upload).permit(:company_id,:employee_id,:title,:tags,:secure,file: {})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...