需要在轨道3上的红宝石中缩短此表达式

时间:2012-04-21 06:48:26

标签: ruby-on-rails ruby ruby-on-rails-3

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

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

它基本上是做什么的 - 它将params的利润值格式化为仅包含数字,如果它为零 - 只要保持为零......有没有办法让它更短。

6 个答案:

答案 0 :(得分:4)

你可以将它收紧一点:

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

答案 1 :(得分:4)

您可以使用#try method from active_support

params[:investor][:profit].try(:gsub!, /\D/, '')

答案 2 :(得分:2)

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

答案 3 :(得分:1)

params[:investor][:profit].gsub!(/\D/, '') if params[:investor][:profit]

或我几乎总是使用的东西:

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

答案 4 :(得分:1)

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

如果params[:investor][:profit]的值为nil,则评估为nil && ...。由于nil为false,因此保持为零,否则执行gsub

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

答案 5 :(得分:0)

prof = params[:investor][:profit]
prof.gsub!(/\D/,'') if prof