2012-07-18 55 views
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}$/ } 

但提交表單用一個美元符號或逗號的值,使其設置:預算0.0

什麼是最好/最乾淨的方式接受像$1,000這樣的值到這個小數列? (我將輸出格式化爲貨幣,在裝飾器中的其他地方)。

回答

1

如果你不在乎做的是保存原始值,你可以創建一個定製的setter:

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

但是,如果您打算在項目中的貨幣做多了,我會強烈建議檢查出寶石money-rails。它爲您提供解析器,驗證器,算術運算符等等來處理貨幣。

+0

引起堆棧太深的循環。 'write_attribute:budget,value.to_s.scan(/ [0-9 \。] /)。join.to_f'就像一個魅力壽(在我給正則表達式添加'\ .'後)。更新,我會接受。 – 2012-07-18 19:36:11

+0

不錯,已更新!你最終會使用錢軌嗎? – 2012-07-19 04:18:19

+0

一旦我深入瞭解我的會計系統,就必須決定。但我還沒有深入閱讀。 – 2012-07-19 20:04:36