如何使用humanized_money_with_symbol方法显示货币?比如 100 美元



我想humanized_money_with_symbol方法返回类似USD$ 100的东西,而不仅仅是$ 100。我也想只在货币符号$时这样做,我们想让用户知道什么时候$是美元,什么时候是澳元。

从未使用过 MoneyRails,但看起来humanized_money_with_symbol只是调用humanized_money合并symbol: true到您传递给它的参数。

然后,该帮助程序依次调用传入的货币对象format,传入您指定的选项。在货币宝石中,您可以传入一个:symbol来呈现货币,例如

m = Money.new('123', :gbp) # => #<Money fractional:123 currency:GBP>
m.format( symbol: m.currency.to_s + ' ') # => "GBP 1.23"

所以,如果你打电话

humanized_money(Money.new('123', :usd), symbol: 'USD $')
# => "USD $1.23"

然后,您可以在应用程序中设置一个帮助程序方法,以避免总是必须传递该符号,例如:

def render_custom_currency(value, options = {})
value.currency.iso_code == "USD" ? humanized_money(value, options.merge(symbol: 'USD $')) : humanized_money(value, options.merge(symbol: true))
end

这应该让你得到你想做的事情。

您可以在initializers/money.rb中覆盖美元配置,以将"USD"显示为符号的一部分:

MoneyRails.configure do |config|
config.register_currency = {
"priority": 2,
"iso_code": "USD",
"name": "United States Dollar",
"symbol": "USD $",
"subunit": "Cent",
"subunit_to_unit": 100,
"symbol_first": true,
"decimal_mark": ".",
"thousands_separator": ",",
}
end

重新启动服务器,您应该会看到"100 美元"。我没有使用多种货币,但这应该使您的其他货币正常显示。

最后,我使用了内置的 MoneyRails gem 选项disambiguate: true

要使用它,您需要调用如下所示的方法:

humanized_money_with_symbol(value, disambiguate: true)

它是如何工作的一些例子在这里

最新更新