Ruby Sinatra上传表单参数受干扰

时间:2018-06-28 07:19:25

标签: ruby parameters sinatra

在Sinatra上提交表单后,出现以下错误:

App 40327 output: 2018-06-28 02:59:17 - NoMethodError - undefined method `[]' for nil:NilClass:
App 40327 output:   /Library/WebServer/Documents/blammo/routes/publish.rb:87:in `block in <class:MyApp>'

该表单是一个文件上传表单,并且具有单个文本字段。简单。该文件将通过,文本字段也将通过。他们都被捕获就好了。

我将params提交给一个方法,该方法最终负责在页面的以下行中生成错误:

fname = params[:s_single_file_upload][:filename]

有问题的方法可以返回布尔值。我用几种方法重写了它,并清除了可能使我绊倒的任何东西 不熟悉。

因此,如果调用上述方法,则params会混乱。因此无法分配fname。我希望params是完整的 此时在代码中。如果在此之前仔细阅读params,是否会造成任何破坏?用另一种语言,我看到params被破坏了 由于某种原因以一种或另一种方式出现,但我不确定Ruby

我没有找到任何nil:NilClass,但这正是它所报告的内容。这是此方法的触发条件:

result = Alpha::rf_alpha_sniff(params)

还有模块::方法:

module Alpha

  def self.rf_alpha_sniff(incoming)
    qualifiers = %w(alpha bravo charlie delta echo foxtrot)
    incoming.delete('captures')
    incoming.delete('splat')            # take out Mustermann's 'captures' and 'splat'
    incoming.delete('s_single_file_upload')         # non-perusal 'single_file_upload'    
    incoming.values.each do |item|
      item = item.gsub(" ","_")
      Dev::hq_log("item: #{ qualifiers.include?(item.downcase) }")
      return true if qualifiers.include?(item.downcase)
    end
    return false
  end

end

因此,如果不使用此方法,则页面可以正常进行。当以任何方式引入该方法时,params似乎被搞砸了,因此文件非常多 不见了

此方法如何干扰params,以至于稍后在脚本中不可用?我希望它在任何地方都可以完全使用。

1 个答案:

答案 0 :(得分:0)

结果发现,使用incoming.deleteparams哈希中删除项目是因为它是对原始对象的引用,而不是使用副本。

因此,我必须使用params(重复)来复制params.dup,以便它们不是同一对象。

查看了params哈希后测试方法,向我展示了确实删除了对象。另一个解决了。