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.
如果 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.