我需要使我的代码更紧凑。我有以下代码:
params[:investor][:profit] = params[:investor][:profit].nil? ? nil : params[:investor][:profit].gsub(/\D/, '')
基本上它的作用 - 它将参数中的利润值格式化为仅包含数字,如果它是零 - 保持它为零......有没有办法让它更短。
我需要使我的代码更紧凑。我有以下代码:
params[:investor][:profit] = params[:investor][:profit].nil? ? nil : params[:investor][:profit].gsub(/\D/, '')
基本上它的作用 - 它将参数中的利润值格式化为仅包含数字,如果它是零 - 保持它为零......有没有办法让它更短。
你可以像这样把它收紧一点:
params[:investor][:profit].gsub!(/\D/, '') unless params[:investor][:profit].nil?
您可以使用active_support 中的 #try 方法:
params[:investor][:profit].try(:gsub!, /\D/, '')
嗯
p = params[:investor][:profit]
p = p.nil? ? nil : p.gsub(/\D/,'')
params[:investor][:profit].gsub!(/\D/, '') if params[:investor][:profit]
或者我几乎总是使用的:
params[:investor][:profit].gsub!(/\D/, '') rescue nil
params[:investor][:profit] &&= params[:investor][:profit].gsub(/\D/, '')
如果 的值为params[:investor][:profit]
nil,则计算结果为nil && ...
。由于 nil 为假,它将保持为 nil,否则执行gsub
.
我认为它与try
另一个解决方案中提到的解决方案有关。选择其中一个取决于个人品味。我喜欢这个&&=
解决方案,因为它是 ruby 而不是 rails 便捷方法,并且您不需要在 try 方法的参数中“加密”您真正想要做的事情。
prof = params[:investor][:profit]
prof.gsub!(/\D/,'') if prof