我正在制作一个简单的零售商务解决方案,其中有 价格 在几个不同的模型中。这些价格促成了 总价 .想象一下为您的酸奶选择浇头多付 0.30 美元。
当我设置 price
字段到
t.decimal :price, precision:8, scale:2
数据库存储
6.50
如6.5
.我知道在标准的 Rails 方式中,您调用 number_to_currency(price)
获取 View 中的格式化值。我需要以编程方式调用 price
字段以及格式化的字符串,即 $6.50 一些不直接属于 View 的地方。此外,我的需求很简单(没有货币转换等),我更喜欢在模型中对价格进行通用格式化,而无需在 View 中重复调用 number_to_currency。有没有一种好方法可以修改我的价格 getter ,使其始终返回带美元符号的小数点后两位,即调用时为 6.50 美元?
提前致谢。
更新
谢谢大家。
我选择使用亚历克斯的方法,因为仅仅为了格式化数字而进行包含似乎非常“骇人听闻”。使用他的方法,我做了:
def price_change=(val)
write_attribute :price_change, val.to_s.gsub(/[\$]/,'').to_d
end
def price_change
"$%.2f" % self[:price_change]
end
干杯。
更新 2
买者自负。一旦你这样做了,你就失去了对数字进行操作的能力,因为它现在是一个字符串。
请注意是否有人面临与我相同的问题。
最佳答案
只需在模型中添加一个方法,该方法的名称类似于数据库中的属性,例如:
def price
"$%.2f" % self[:price]
end
这使您可以完全控制格式或使用 Rails 提供的辅助方法
def price
ActionController::Base.helpers.number_to_currency(self[:price])
end
这应该可以解决问题。
希望能帮助到你!
关于ruby-on-rails - Rails - 在 Getter 中将数字格式设置为货币格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10053967/