2

コードをよりコンパクトにする必要があります。次のコードがあります。

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

基本的に何をするか - params からの利益値をフォーマットして数字のみを含むようにし、nil の場合は nil のままにします...短くする方法はありますか?

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] &&= params[:investor][:profit].gsub(/\D/, '')

の値params[:investor][:profit]が nil の場合、これは と評価されnil && ...ます。nil は false であるため、nil のままになります。それ以外の場合はgsub.

try別の解決策で言及されている解決策に頭を悩ませていると思います。どちらを選択するかは、個人の好みによるものです。&&=Railsの便利なメソッドではなくルビーであり、tryメソッドのパラメーターで本当にやりたいことを「暗号化」する必要がないため、このソリューションが気に入っています。

于 2012-04-21T10:51:24.303 に答える
1
params[:investor][:profit].gsub!(/\D/, '') if params[:investor][:profit]

または私がほとんどいつも使っているもの:

params[:investor][:profit].gsub!(/\D/, '') rescue nil
于 2012-04-21T07:40:10.273 に答える
0
prof = params[:investor][:profit]
prof.gsub!(/\D/,'') if prof
于 2012-04-21T14:18:39.920 に答える