【问题标题】:How to check if params[:some][:field] is nil?如何检查 params[:some][:field] 是否为零?
【发布时间】:2012-08-04 11:36:06
【问题描述】:

我尝试了代码,增加了很多人 - How to test if parameters exist in rails,但它不起作用():

     if ( params.has_key?([:start_date]) && params.has_key?([:end_date]) )

我认为,那是因为复杂的参数,如果我写这个:

       if ( params.has_key?([:report][:start_date]) && params.has_key?([:report][:end_date]) )

给我错误

        can't convert Symbol into Integer

这也不起作用:

           if ( params[:report][:start_date] && params[:report][:end_date] )

给我错误:

        undefined method `[]' for nil:NilClass

它总是进入 else 语句。

这是我的参数:

    report: 
    start_date: 01/08/2012
    end_date: 10/08/2012

有人可以帮我吗?

【问题讨论】:

标签: ruby-on-rails params null


【解决方案1】:
 if params[:report] && params[:report][:start_date] && params[:report][:end_date]

【讨论】:

  • Mikhail Nikalyukin,你好,来自卢茨克,泽梅利亚)
  • 没有更简洁优雅的方法吗?
【解决方案2】:

来自here的交叉回复:

Ruby 2.3.0 使用#dig 让这一切变得非常容易。

h = { foo: {bar: {baz: 1}}}

h.dig(:foo, :bar, :baz)           #=> 1
h.dig(:foo, :zot, :baz)           #=> nil

【讨论】:

    【解决方案3】:

    我也一直在寻找更好的解决方案。我找到了这个:

    Is there a clean way to avoid calling a method on nil in a nested params hash?

    params[:some].try(:[], :field)
    

    如果值不存在,则获取值或nil

    所以我想我们换一种方式使用try

    params[:some].try(:has_key?, :field)
    

    还不错。如果未设置,您将得到 nilfalse。如果参数设置为nil,您还将获得true

    【讨论】:

    • 注意:try 是 Rails 方法,而不是 Ruby 方法。
    【解决方案4】:

    您似乎需要以下内容

        params[:report].present?
    

        params[:report].nil?
    

        params[:report].empty?
    

    取决于您要检查的内容

    【讨论】:

      【解决方案5】:

      这适用于:

      if params[:report].has_key?(:start_date)
      

      也许添加这个,这样你也可以检查它是否不为空:

      && !params[:report][:start_date].empty?
      

      【讨论】:

        猜你喜欢
        • 2011-04-13
        • 2014-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-04
        • 1970-01-01
        相关资源
        最近更新 更多