Ruby on rails Carrierwave:NoMethodError-未定义的方法'permit';对于#<;行动调度…>;

Ruby on rails Carrierwave:NoMethodError-未定义的方法'permit';对于#<;行动调度…>;,ruby-on-rails,carrierwave,dropzone.js,actiondispatch,Ruby On Rails,Carrierwave,Dropzone.js,Actiondispatch,我想我已经知道这里的答案了,但我想我会把这个贴出来,以帮助其他遇到这个问题的人,因为我在其他地方找不到这个 我有一个典型的Rails模型,并添加了一个Carrierwave上传程序 当我上传时,我收到以下错误: Started POST "/model/2/uploads" for ::1 at 2016-04-23 13:45:23 -0600 Processing by UploadsController#create as JSON Parameters: {"utf8"=>"✓

我想我已经知道这里的答案了,但我想我会把这个贴出来,以帮助其他遇到这个问题的人,因为我在其他地方找不到这个

我有一个典型的Rails模型,并添加了一个Carrierwave上传程序

当我上传时,我收到以下错误:

Started POST "/model/2/uploads" for ::1 at 2016-04-23 13:45:23 -0600
Processing by UploadsController#create as JSON
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"PPrsIJu4EI5R47VzbfBknaq7QPRpcjsZzCVTkWn2BEEYVc36CQf5rnePTBaVOy6VOX47M4GcrdGCDmH7g8vCQw==", "upload"=>#<ActionDispatch::Http::UploadedFile:0x007fa1b1ea9368 @tempfile=#<Tempfi...
NoMethodError - undefined method `permit' for #<ActionDispatch::Http::UploadedFile:0x007fa1b1ea9368>
当您通过CW上传时,Params安全检查(我应该在后台通过JSON注意到这一点)

我确信我可以在这里找到一些条件来允许一篇普通的html文章,但我想确认我没有遗漏更优雅的东西,或者我遗漏了某个配置选项

因此,我的问题是:

1.)在这种情况下,我是否遗漏了此处记录的内容

2.)是否有更优雅的解决方案/安全的解决方案,而不是检查请求是否为JSON等的基本检查

更新


忘了提及我也在使用Dropzone进行上传。

params[:upload]
不是一个典型的
散列,无差别访问
,使用
params.permit(:upload等…)
应该可以。

+1到@anthony-e让我思考这个问题。Dropzone.js就是问题所在。我无法更改DS配置中的
参数名:
。我有
paramName:'upload'
,而它本应该是
paramName:'upload[file]'
。DS.js随后在我的
upload
params中发送了ActionDispatch。

感谢您的回复,但如果您仔细检查我的帖子
params,我就有许可证了。控制器试图对上传参数调用permit,在JSON的情况下,上传参数不是散列。在我的问题或代码中,我没有在任何地方使用
params[:upload]
。在您的示例中,您正在调用
params.require(:upload)
,这与
params.permit
不同。是这样吗?这会导致
未经许可的参数:utf8、真实性令牌、上传、位置id
,我想说的是这会打开一个安全漏洞?我尝试了
params.permit(:utf8,:authenticity\u token,:upload,:location\u id)
下一步看看会发生什么,我得到了
NoMethodError-未定义的方法
原始文件名'。上传`ActionDispatch有一组变量,其中一个变量是
@original\u filename=“email\u 3.jpg”
。更新了我正在使用Dropzone进行上传的帖子。你能显示你的表单操作吗?有点奇怪,
上传
显示在参数中。谢谢,这真的帮助了我!
    def upload_params
#      params.require(:upload).permit(:file, :notes)
      params.require(:upload)

    end