在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
,以至于稍后在脚本中不可用?我希望它在任何地方都可以完全使用。
答案 0 :(得分:0)
结果发现,使用incoming.delete
从params
哈希中删除项目是因为它是对原始对象的引用,而不是使用副本。
因此,我必须使用params
(重复)来复制params.dup
,以便它们不是同一对象。
查看了params
哈希后测试方法,向我展示了确实删除了对象。另一个解决了。