10

私はコードを試しましたが、それは多くの人々にプラスされました-パラメーターが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

誰かが私を助けることができますか?

4

5 に答える 5

13
 if params[:report] && params[:report][:start_date] && params[:report][:end_date]
于 2012-08-07T12:47:44.503 に答える
12

ここからのクロスポスト回答:

Ruby 2.3.0では、これを#digで非常に簡単に行うことができます。

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

h.dig(:foo, :bar, :baz)           #=> 1
h.dig(:foo, :zot, :baz)           #=> nil
于 2015-12-31T19:26:24.927 に答える
7

私もより良い解決策を探していました。私はこれを見つけました:

ネストされたparamsハッシュでnilのメソッドを呼び出さないようにするクリーンな方法はありますか?

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

値を取得するか、値nilが存在しない場合。

だから私tryは別の方法を使用しようと考えました:

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

悪くない。nil設定されていない場合と比較しますfalsetrueparamがに設定されているかどうかもわかりますnil

于 2015-11-27T04:48:38.030 に答える
6

次のものが必要なようです

    params[:report].present?

また

    params[:report].nil?

また

    params[:report].empty?

あなたがチェックしようとしているものに応じて

于 2012-08-07T12:47:23.500 に答える
1

これは次のように機能します。

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

そして多分これを追加して、それが空でないかどうかもチェックします:

&& !params[:report][:start_date].empty?
于 2016-12-09T10:56:11.563 に答える