我需要让我的代码更紧凑。我有以下代码:
params[:investor][:profit] = params[:investor][:profit].nil? ? nil : params[:investor][:profit].gsub(/\D/, '')
它基本上是做什么的 - 它将params的利润值格式化为仅包含数字,如果它为零 - 只要保持为零......有没有办法让它更短。
答案 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