Ruby on rails Ruby/Rails中条件变量操作的快捷方式

Ruby on rails Ruby/Rails中条件变量操作的快捷方式,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我的API控制器接收的一个参数有一个大的键名,我需要将它从字符串转换为整数(如果有),然后再将其发送到要持久化的模型。通常,我会执行以下操作之一: params[:really_big_key_name] = params[:really_big_key_name].to_i unless params[:really_big_key_name].blank? 或 正如您所看到的,代码行变大了,超过80个字符,我希望坚持使用Ruby最佳实践。有没有一种更短、更具Ruby风格的方法可以做到这一点

我的API控制器接收的一个参数有一个大的键名,我需要将它从字符串转换为整数(如果有),然后再将其发送到要持久化的模型。通常,我会执行以下操作之一:

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

正如您所看到的,代码行变大了,超过80个字符,我希望坚持使用Ruby最佳实践。有没有一种更短、更具Ruby风格的方法可以做到这一点?也许是“就地”方法。类似于数组的东西与bang方法有关。不幸的是,
给我对于字符串不存在,这正是我所需要的。

您可以这样做:

params[:really_big_key_name] = params[:really_big_key_name].try(:to_i)
您可以这样做:

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

我想说一个就地方法不可能存在,因为这会将类型从
string
更改为
number
。您可以始终使用我认为不存在的就地方法,因为这样会将类型从
string
更改为
number
。您可以始终对nil:NilClass使用
NoMethodError:undefined方法“try”
@BradWerth您使用的是Rails还是纯Ruby<代码>尝试
是Rails自2.3.2以来的一部分。你说得对-我没有使用Rails。FWIW,这个答案的纯ruby版本是
params[:really_big_key_name]=params[:really_big_key_name]&。to_i
@BradWerth啊,好主意。显然,在本例中,OP使用的是Rails,但仍然非常了解:拇指支持:我会坚持使用
试试
@BradWerth建议使用
params[:really_big_key_name]&.to_i
非常好,但它需要Ruby 2.3,目前我正在使用Ruby 2.1。谢谢你们的回答,伙计们
NoMethodError:nil:NilClass的未定义方法“try”
@BradWerth您使用的是Rails还是纯Ruby<代码>尝试
是Rails自2.3.2以来的一部分。你说得对-我没有使用Rails。FWIW,这个答案的纯ruby版本是
params[:really_big_key_name]=params[:really_big_key_name]&。to_i
@BradWerth啊,好主意。显然,在本例中,OP使用的是Rails,但仍然非常了解:拇指支持:我会坚持使用
试试
@BradWerth建议使用
params[:really_big_key_name]&.to_i
非常好,但它需要Ruby 2.3,目前我正在使用Ruby 2.1。谢谢你们的回答,伙计们!