Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-在Getter中将数字格式化为货币格式_Ruby On Rails_Currency - Fatal编程技术网

Ruby on rails Rails-在Getter中将数字格式化为货币格式

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,在一些不直接属于视图的地方

我正在制作一个简单的零售商业解决方案,其中有几个不同型号的价格。这些价格构成了总价格。想象一下,为你的酸奶选择一种配料要多付0.30美元

当我将
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。我将实际试用这两种方法=)