コードをよりコンパクトにする必要があります。次のコードがあります。
params[:investor][:profit] = params[:investor][:profit].nil? ? nil : params[:investor][:profit].gsub(/\D/, '')
基本的に何をするか - params からの利益値をフォーマットして数字のみを含むようにし、nil の場合は nil のままにします...短くする方法はありますか?
コードをよりコンパクトにする必要があります。次のコードがあります。
params[:investor][:profit] = params[:investor][:profit].nil? ? nil : params[:investor][:profit].gsub(/\D/, '')
基本的に何をするか - params からの利益値をフォーマットして数字のみを含むようにし、nil の場合は nil のままにします...短くする方法はありますか?
次のように少し締めることができます。
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] &&= params[:investor][:profit].gsub(/\D/, '')
の値params[:investor][:profit]
が nil の場合、これは と評価されnil && ...
ます。nil は false であるため、nil のままになります。それ以外の場合はgsub
.
try
別の解決策で言及されている解決策に頭を悩ませていると思います。どちらを選択するかは、個人の好みによるものです。&&=
Railsの便利なメソッドではなくルビーであり、tryメソッドのパラメーターで本当にやりたいことを「暗号化」する必要がないため、このソリューションが気に入っています。
params[:investor][:profit].gsub!(/\D/, '') if params[:investor][:profit]
または私がほとんどいつも使っているもの:
params[:investor][:profit].gsub!(/\D/, '') rescue nil
prof = params[:investor][:profit]
prof.gsub!(/\D/,'') if prof