2017-05-17 74 views
0

我是Ruby on Rails的新手。有沒有更優雅或簡潔的方式來做到這一點?簡明的方法來設置默認值?

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

我只是想分配一個默認值,如果參數不存在。我的方式似乎有點笨重。

回答

2

如果您想爲一個鍵設置默認值,Hash#fetch是您的答案。

如果傳遞一個塊,它將返回塊的值,如果該鍵不在PARAMS中。

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

如果默認是容易計算,可以一樣好做,因爲在該方法的第二個參數:

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
  • ||將值返回至其如果一個公司letfnil

請注意,此選項還將設置foo'default'如果params[:foo]是空的。