2011-11-15 36 views
1

我将故事货币值整数化为price_in_cents或fee_in_cents。因此,1.00美元将作为100存储在数据库中。在Rails中将货币值转换为美分的麻烦

在内部,我一直只是在表单中输入100时,我的意思是1.00,但我认为将表单输入1.00转换为100模型,但我遇到了麻烦。

不管我输入什么,我都得到两个值。这里的模型:

before_create :convert_money_to_cents 
    attr_accessor :price, :fee 

    private 

    def convert_money_to_cents 
    self.price_in_cents = price.to_i * 100 
    self.fee_in_cents = fee.to_i * 100 
    end 

任何想法,为什么它总是出现零?我尝试将字符串转换为各种东西(浮动),我仍然得到零。

+0

什么是您的视图和控制器是什么样子?我怀疑当他们读取回调方法时,价格和费用是零。 –

+0

我正在使用'text_field_tag'而不是'text_field' ...现在工作。 – Slick23

+0

它是否适用于“1.99”,给你199? 'to_i'实际上会给你1,当乘以100时,给出100的错误答案。 –

回答

2

试试这个:

def convert_money_to_cents 
    self.price_in_cents = (self.price.to_d * 100).to_i 
    self.fee_in_cents = (self.fee.to_d * 100).to_i 
end 
+0

因此,在尝试后......看起来'价格'和'费用'实际上是'无'......但它们是以参数形式提交的。 ''price“=>”1.99“, ”fee“=>”。30“,'...所以,我不确定为什么它的方法试图使用它。 – Slick23

+0

您可能错过了作业右侧的self.',我已经更改了我发布的代码。尝试一下。 –

+0

是的,当我看到nil错误时,我是第一次尝试自我。它仍然是零。 – Slick23

0

我可能会做这样的事情:

class Numeric 
    def to_cents 
    (self.to_f * 100).to_i 
    end 
end 
+0

或者'self * 100.0',它可以更优雅地进行类型提升。实际上,'self * 100'可能就足够了:如果'self'是一个整数,则整数运算会给出准确的结果,如果不是,则无论如何将会发生提升。 –