2

我需要使我的代码更紧凑。我有以下代码:

params[:investor][:profit] = params[:investor][:profit].nil? ? nil : params[:investor][:profit].gsub(/\D/, '')

基本上它的作用 - 它将参数中的利润值格式化为仅包含数字,如果它是零 - 保持它为零......有没有办法让它更短。

4

6 回答 6

4

你可以像这样把它收紧一点:

params[:investor][:profit].gsub!(/\D/, '') unless params[:investor][:profit].nil?
于 2012-04-21T06:50:59.550 回答
4

您可以使用active_support 中的 #try 方法

params[:investor][:profit].try(:gsub!, /\D/, '')
于 2012-04-21T06:56:54.557 回答
2

p = params[:investor][:profit]
p = p.nil? ? nil : p.gsub(/\D/,'')
于 2012-04-21T06:51:34.947 回答
1
params[:investor][:profit].gsub!(/\D/, '') if params[:investor][:profit]

或者我几乎总是使用的:

params[:investor][:profit].gsub!(/\D/, '') rescue nil
于 2012-04-21T07:40:10.273 回答
1
params[:investor][:profit] &&= params[:investor][:profit].gsub(/\D/, '')

如果 的值为params[:investor][:profit]nil,则计算结果为nil && ...。由于 nil 为假,它将保持为 nil,否则执行gsub.

我认为它与try另一个解决方案中提到的解决方案有关。选择其中一个取决于个人品味。我喜欢这个&&=解决方案,因为它是 ruby​​ 而不是 rails 便捷方法,并且您不需要在 try 方法的参数中“加密”您真正想要做的事情。

于 2012-04-21T10:51:24.303 回答
0
prof = params[:investor][:profit]
prof.gsub!(/\D/,'') if prof
于 2012-04-21T14:18:39.920 回答