2012-02-04 62 views
1

我對Rails很陌生,這是我第一次使用錢git。我插入下面的代碼到我的模型,如金錢寶石維基說:Ruby on Rails錢寶石:從表格創造錢

composed_of :cash, 
:class_name => "Money", 
:mapping => [%w(amount cents), %w(currency currency_as_string)], 
:constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency ||  Money.default_currency) }, 
:converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money :  raise(ArgumentError, "Can't convert #{value.class} to Money") } 

在我的數據庫,我有兩個字段:量(整數)和貨幣(字符串)

我也有一個表格,用戶可以輸入一定的現金金額:

<%= f.number_field :amount %> 

這裏的問題是,用戶填寫他們的金額,如1,50而不是150美分。在將數據插入數據庫之前,將用戶輸入從1,50轉換爲150的最佳方法是什麼?

問候, 格溫

回答

0

替換逗號,點,解析爲浮動和100

("1,50".gsub(',', '.').to_f * 100).to_i 
# => 150 
0

幾個選項可供繁殖。

在所有情況下,您都需要了解在中輸入的貨幣是否爲,如果輸入的貨幣格式不是Money.default_currency中定義的默認貨幣。 1)使用新組合的存取器#cash

<%= f.number_field :cash %> 

注意:f.number_field方法生成的數字微調器不是文本字段。

2)重載#amount的定義。請注意,我認爲這種方法否定了對compos_of宏的需求。

def amount 
    cents = read_attribute(:amount) || 0 
    currency = read_attribute(:currency_as_string) || Money.default_currency 
    Money.new(cents, currency) 
end 

def amount=(value) 
    cash = Money.from_string(value) 
    write_attribute(:amount, cash.cents) 
end 

看一看類的方法Money.from_ *在documentation,具體而言,看看一個方法Money.from_string[link]