2017-05-17 9 views
0

Ruby on Railsの新機能です。これを行うためのよりエレガントで簡潔な方法がありますか?簡潔な方法でデフォルト値を設定しますか?

foo = params[:foo].nil? ? 'default' : params[:foo] 

パラメータがない場合は、単にデフォルト値を割り当てる必要があります。私のやり方はちょっと大変なようです。

答えて

2

1つのキーにデフォルト値を設定する場合は、Hash#fetchが答えです。

ブロックを渡すと、キーがparamsにない場合はブロックの値が返されます。

params = {} 
params.fetch(:foo) { 'default' } 
=> "default" 

デフォルトは計算しやすい場合は、あなただけの、同様の方法で2番目の引数としてこれを行うことができます。

params = {} 
params.fetch(:foo, 'default') 
=> "default" 

あなたは全体のハッシュのデフォルトを設定したい場合は、 #default=#default_procを調べる必要があります。あなたの質問はparamsに関係しているので、適切なデフォルトでハッシュを初期化できないと思います。

ところで、値がnilに設定されている場合、あなたの方法はnilを返しませんが、フェッチは正しくnilを返します。

params[:foo] = nil 
params.fetch(:foo) { 'default' } 
=> nil 
+0

これは、私が探しているものです。 –

1

の短い同等:

foo = params[:foo].nil? ? 'default' : params[:foo] 

は、私が好きな

foo = params[:foo] || 'default' 
3

です:

foo = params[:foo] || 'default' 
+2

これは答えになるはずです。 OR演算子を使用してデフォルト値を設定できることを誰もが知っているはずです。 – nbkhope

0

別のオプションこのコードをチェックし、presence方法を使用することです:

foo = params[:foo].presence || 'default' 
  • presenceチェック値が存在する場合(すなわち、がnil /空でない場合)、そうである場合はその値を返し、そうでない場合はnilを返します。 1そのletfnilある場合
  • ||はそのに値を返します。

params[:foo]が空の場合、このオプションはまた、'default'fooに設定されますのでご注意ください。

関連する問題