0

私のモデルは:

validates :budget,  :numericality => {:greater_than_or_equal_to => 0.01},
                    :presence => true,
                    :format => { :with => /^[$]?([0-9][0-9]?([,][0-9]{3}){0,4}([.][0-9]{0,4})?)$|^[$]?([0-9]{1,14})?([.][0-9]{1,4})$|^[$]?[0-9]{1,14}$/ }

ただし、ドル記号またはカンマを含む値を使用してフォームを送信すると、:budgetがに設定されます0.0

$1,000この10進数の列のような値を受け入れるための最良/最もクリーンな方法は何ですか?(私は出力を通貨として、他の場所で、デコレータでフォーマットします)。

4

1 に答える 1

1

生の値を保存するだけの場合は、カスタムセッターを作成できます。

def budget= value
  write_attribute :budget, value.scan(/[0-9]/).join.to_f
end

しかし、プロジェクトで通貨をさらに活用する予定がある場合は、 Money-railsの宝石をチェックすることを強くお勧めします。パーサー、バリデーター、算術演算子など、通貨を処理するための機能を提供します。

于 2012-07-18T06:28:17.370 に答える