Ruby on rails Rails-在Getter中将数字格式化为货币格式
我正在制作一个简单的零售商业解决方案,其中有几个不同型号的价格。这些价格构成了总价格。想象一下,为你的酸奶选择一种配料要多付0.30美元 当我将Ruby on rails Rails-在Getter中将数字格式化为货币格式,ruby-on-rails,currency,Ruby On Rails,Currency,我正在制作一个简单的零售商业解决方案,其中有几个不同型号的价格。这些价格构成了总价格。想象一下,为你的酸奶选择一种配料要多付0.30美元 当我将price字段设置为 t.decimal :price, precision:8, scale:2 数据库将6.50存储为6.5。我知道,在标准rails方式中,您可以调用number\u to\u currency(price)来获取视图中的格式化值。我需要以编程方式调用price字段以及格式良好的字符串,即$6.50,在一些不直接属于视图的地方
price
字段设置为
t.decimal :price, precision:8, scale:2
数据库将6.50
存储为6.5
。我知道,在标准rails方式中,您可以调用number\u to\u currency(price)
来获取视图中的格式化值。我需要以编程方式调用price
字段以及格式良好的字符串,即$6.50,在一些不直接属于视图的地方。另外,我的需求很简单(没有货币转换等),我更喜欢在模型中对价格进行通用格式化,而不必在视图中重复调用数字\u到\u货币
有没有一个好方法可以修改我的getter for price,使其在调用时总是返回带美元符号的两位小数,即$6.50
提前谢谢
更新
谢谢大家
我选择使用Alex的方法,因为仅仅为了格式化数字而进行包含似乎非常“黑客”。利用他的方法,我做到了:
def price_change=(val)
write_attribute :price_change, val.to_s.gsub(/[\$]/,'').to_d
end
def price_change
"$%.2f" % self[:price_change]
end
干杯
更新2
警告买主。一旦你这样做了,你就失去了对数字进行运算的能力,因为它现在是一个字符串
如果有人面临与我相同的问题,请小心。试试看
include ActionView::Helpers::NumberHelper
对于模型只需在模型中添加一个名为“与数据库中的属性类似”的方法,如:
def price
"$%.2f" % self[:price]
end
这使您能够完全控制格式设置或使用Rails提供的助手方法
def price
ActionController::Base.helpers.number_to_currency(self[:price])
end
这应该能奏效。
希望有帮助 我建议采用演讲者的方式,就像德雷珀(见reailscast)那样
另一个解决方案是在模型中实现您自己的方法,即
格式化\u price
,并自行进行格式化(即使用ActionView::Helpers::NumberHelper
模块)。但是,由于模型代表rails应用程序中的普通数据,这样做有点可疑,我认为这会干扰传统的配置方法。您可以使用helpers模块,但不应该包括整个模块,因为它包含了很多你可能并不真正需要的方法,或者覆盖了你的一些方法。但您可以直接使用它们:
ActionController::Base.helpers.number_to_currency(6.5)
#=> "$6.50"
您还可以为助手定义一个方法,以便轻松使用它们
def helpers
ActionController::Base.helpers
end
"#{helpers.number_to_currency(6.5)}"
看看这个谢谢!我想一定有一些内置的数字格式。在模型中加入ActionView或ActionController有点谨慎。问题是你不能用价格作为数字,它到处都是字符串。我正在寻找一种方法,使rails助手在to_sThanks man上以这种方式转换它。如上所述,对此有点谨慎,似乎打破了MVC。我将实际试用这两种方法=)