添加 if 语句后为 nil:NilClass 的未定义方法 '[]'



添加 if 语句后,我收到一个 NoMethodError,如果用户输入的位数大于 5,则会抛出错误。

如果未选择持续时间筛选器,并且用户按另一个没有持续时间的筛选器进行搜索,则会引发 NoMethodErrorif @filters[:duration][:durations].join("").length <= 5

如果未选择持续时间过滤器,我认为抛出错误将是 nil,我相信?

这是我的控制器代码

unless params[:searched] 
@filters[:duration] ||= Hash.new
@filters[:duration][:durations] = ['1']
@filters[:duration][:operators] = [:gt]
end
if @filters.try(:[],:duration).try(:[],:durations)
@filters[:duration][:durations].map!(&:to_i)
end
if @filters[:duration][:durations].join("").length <= 5 
Notice.gpush("number is within range")
@recording_metadata = RecordingMetadata.find(@tenant, request.session_options[:id], (start_time..end_time), @filters, additional_options)
else
Notice.rpush("4 digits")
save_notice
render action: :index
end

如果不确定是否具有哈希所需的键,可以使用fetch方法提供回退。

@filters.fetch(:duration, {}).fetch(:durations, []).join("").length <= 5

现在,如果 :d uration 不存在,它将返回一个空哈希,然后第二个fetch将返回一个空数组,因此您的代码不会引发异常。

最新更新