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

问题描述 投票:0回答:2

如何实现某项功能,例如是否存在params[:filters][:company_name](不是nil),然后执行以下操作,但是如果它为nil,则跳过并执行下面/之外的其余代码?

if params[:filters][:company_name]
  contains = InquiryProcess
             .where(
               'inquiry_process_summary_pdf LIKE ?', "#{params[:filters][:company_name].downcase}%"
             )
end
ruby-on-rails ruby grape
2个回答
0
投票

尝试更改

if params[:filters][:company_name]

to

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

0
投票

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

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

Hash#dig

如果if params.dig(:filters, :company_name) # ... end ,这不会失败。从上面的链接文档(重点是我的):

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

© www.soinside.com 2019 - 2024. All rights reserved.