首页 > 解决方案 > Ruby 不对 if 块中的 nil 类执行操作

问题描述

如何实现某事,例如 ifparams[:filters][:company_name]存在(不是 nil),然后执行以下操作,但如果它是 nil - 跳过并执行 if 下方/之外的其余代码?

if params[:filters][:company_name]
  contains = Process
             .where(
               'company_name LIKE ?', "#{params[:filters][:company_name].downcase}%"
             )
end

标签: ruby-on-railsrubygrape

解决方案


假设您的问题是代码“爆炸”如果params[:filters]nil. (你得到一个错误:“未定义的方法:[]nil:NilClass。)

有多种方法可以处理这个问题,但最简洁的方法可能是使用Hash#dig

if params.dig(:filters, :company_name)
  # ...
end

如果params[:filters] == nil. 从上面的链接文档(重点是我的):

通过在每一步调用 dig 提取键对象序列指定的嵌套值,如果任何中间步骤为 nil 则返回 nil


推荐阅读