【问题标题】:Ruby don't do actions for nil class in if block [duplicate]Ruby 不会在 if 块中为 nil 类执行操作 [重复]
【发布时间】:2019-10-23 15:35:33
【问题描述】:

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

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

【问题讨论】:

  • 好吧,您可以完全按照代码中所示的方式进行操作。你有什么问题吗?
  • @HolgerJust 如果params[:filters]nil,此代码将抛出错误

标签: ruby-on-rails ruby grape


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    尝试改变

    if params[:filters][:company_name]
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-17
      • 2023-04-04
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多