2017-02-10 46 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' –