【问题标题】:Carrierwave: NoMethodError - undefined method `permit' for #<ActionDispatch...>Carrierwave:NoMethodError - #<ActionDispatch...> 的未定义方法“允许”
【发布时间】:2016-08-17 12:10:00
【问题描述】:

我想我已经知道答案了,但我想我会发布这个来帮助遇到这个问题的其他人,因为我在其他任何地方都找不到这个帖子。

我有一个典型的 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 上传时的参数安全检查(我应该在后台通过 JSON 记录这一点)。

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

所以要明确我的问题是:

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

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

更新

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

【问题讨论】:

    标签: ruby-on-rails carrierwave dropzone.js actiondispatch


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这对我很有帮助!
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回复,但如果您仔细检查我的帖子 params.permit 就是我所拥有的。控制器正在尝试对上传参数调用 permit,在 JSON 情况下,该参数不是散列。我没有在我的问题或代码中的任何地方使用params[:upload]
    • 在您的示例中,您在params.require(:upload) 上调用permit,这与params.permit 不同。是这样吗?
    • 这导致Unpermitted parameters: utf8, authenticity_token, upload, location_id,我会说是打开了一个安全漏洞?我尝试了params.permit(:utf8, :authenticity_token, :upload, :location_id) next 看看会发生什么,我得到NoMethodError - undefined method original_filename' for #<:parameters:0x007fb7c37112e0>. The upload` ActionDispatch 有一堆变量,一个是@original_filename="email_3.jpg"
    • 更新了帖子 - 忘了我正在使用 Dropzone 进行上传。
    • 你能显示你的表单动作吗? upload 显示在参数中有点奇怪。
    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多