Carrierwave:NoMethodError - 未定义的方法`permit&#39;对于#<actiondispatch ...>

时间:2016-04-24 00:20:46

标签: 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"=>"✓", "authenticity_token"=>"PPrsIJu4EI5R47VzbfBknaq7QPRpcjsZzCVTkWn2BEEYVc36CQf5rnePTBaVOy6VOX47M4GcrdGCDmH7g8vCQw==", "upload"=>#<ActionDispatch::Http::UploadedFile:0x007fa1b1ea9368 @tempfile=#<Tempfi...
NoMethodError - undefined method `permit' for #<ActionDispatch::Http::UploadedFile:0x007fa1b1ea9368>

看起来像这篇文章:

undefined method `permit' for #<String:0x007f66ec6ff180> ruby on rails

我无法(我相信现在有人会找到它)在任何需要修改控制器以跳过正常情况的地方找到它:

    def upload_params
#      params.require(:upload).permit(:file, :notes)
      params.require(:upload)

    end

通过CW上传时的Params安全检查(我应该在后台通过JSON注意这一点)。

我相信我可以在这里找出一些条件允许正常的html帖子,但我想确认我没有遗漏更优雅的东西或者我在某处错过了配置选项。

所以要清楚我的问题是:

1。)在这种情况下,我错过了这里记录的内容吗?

2。)是否有更优雅的解决方案/安全解决方案与基本检查相比,以查看请求是否为JSON等?

更新

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

2 个答案:

答案 0 :(得分:2)

+1 @ @ anthony-e让我想到这个。 Dropzone.js是个问题。我无法更改DS配置中的paramName:。我应该paramName: 'upload'paramName: 'upload[file]'。然后DS.js在我的upload参数中发送了ActionDispatch。

答案 1 :(得分:1)

params[:upload]不是典型的HashWithIndifferentAccess,使用params.permit(:upload, etc...)应该有效。