2012-04-21 10 views
2

私のコードをもっとコンパクトにする必要があります。私は、次のコードをしている:基本的にはそれが何をするかruby​​ onレールでこの式を短くする必要があります。3

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

を - それは数字だけを含むようにのparamsから利益値をフォーマットし、それがnilだった場合 - ちょうどそれを短くするためにどのような方法があります... nilをそれを保ちます。あなたは#try method from active_supportを使用することができ

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

答えて

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

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

別の解決策に記載されているtryソリューションでは頭がおかしくなると思います。一方を選択すると、個人的な好みになります。私は&&=ソリューションが好きです。なぜなら、レールの便利なメソッドの代わりにルビーだからです。あなたが実際にtryメソッドのパラメータでやりたいことを "暗号化"する必要はありません。

+1

私はあなたのソリューションが大好きです - 私は、|| =の反対があることを知らなかったが、今あなたのおかげで私は&& = :)を使用します。ありがとう –

+0

嬉しいです。あなたがそれを受け入れられた答えとすることができれば素晴らしいでしょう。ありがとう – emrass

4

あなたは少しので、同じようにそれをダウン締め可能性常に使用:

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

素敵な1、答えてくれてありがとう –

2

ええと

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

おかげで、私は実際に私は後でそれを使用することができますので、それはツバメとして* ... –

4

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

または何私はほとんど

+0

第二の変法が推奨されたものではないを含む任意の*エラーを(params配列を更新する必要があります飲み込むことを意図している)、コードの本来の意図を伝えることができません。 –

+0

@holger - そうですが、主にスクリプトの完成に関心があるときに、あなたが望むものです。 – pguardiario

0
prof = params[:investor][:profit] 
prof.gsub!(/\D/,'') if prof 
関連する問題