2017-02-10 44 views
1

我的API控制器接收的一個參數有一個很大的鍵名,我需要將它從字符串轉換爲整數(如果存在),然後將其發送到要保留的模型。通常我會做下列之一:Ruby/Rails中條件變量操作的快捷方式

params[:really_big_key_name] = params[:really_big_key_name].to_i unless params[:really_big_key_name].blank? 

params[:really_big_key_name] = params[:really_big_key_name].present? ? params[:really_big_key_name].to_i : nil 

正如你看到的,代碼行變得大,擁有超過80個字符,我想堅持使用Ruby的最佳實踐。是否有更短的,更多的Ruby方式來做同樣的事情?也許「就地」的方法。像數組一樣使用爆炸方法。不幸的是,to_i!不存在字符串,這正是我所需要的。

+0

我想說的替代方法是不可能存在的,因爲這會從'string'類型更改爲'number'。你總是可以使用[try](http://apidock.com/rails/v3.2.1/Object/try) –

回答

0

你可以這樣做:

params[:really_big_key_name] = params[:really_big_key_name].try(:to_i) 
+0

'NoMethodError:未定義的方法'嘗試'爲零:NilClass' –

+0

@BradWerth你使用的是Rails還是純Ruby ?自從2.3.2開始,'try'就是Rails的一部分。 – jeffdill2

+1

你是對的 - 我沒有使用Rails。 FWIW,這個答案的純ruby版本是'params [:really_big_key_name] = params [:really_big_key_name]&to_i' –