Ruby 不要在 if 块中对 nil class 执行操作

Ruby don't do actions for nil class in if block

如果 params[:filters][:company_name] 存在(不是 nil),如何实现某事然后执行以下操作,但如果它为 nil - 跳过并执行此代码的其余部分 below/outside if ?

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

尝试改变

if params[:filters][:company_name]

if params[:filters] && params[:filters][:company_name]

假设你的问题是代码"blows up"如果params[:filters]nil。 (你得到一个错误:"undefined method :[] for nil:NilClass"。)

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

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

如果params[:filters] == nil,这不会失败。从上面的链接文档(重点是我的):

Extracts the nested value specified by the sequence of key objects by calling dig at each step, returning nil if any intermediate step is nil.