5

我正在使用money-rails gem,并希望在我的视图中显示不同货币的列表,但我现在拥有的代码不起作用。

我有我的Price模型和字段in_cents,并且currency

create_table :prices do |t|
  t.integer :in_cents, default: 0, null: false
  t.string :currency, default: 'USD', null: false

现在根据Money gem和 Money-Rails 文档,我必须执行以下操作:

class Price < ActiveRecord::Base

  monetize :in_cents, as: "amount", with_model_currency: :in_cents_currency

  def all_currencies(hash)
    hash.keys
  end

比我对简单形式 gem 的看法:

= f.input :currency, collection: all_currencies(Money::Currency.table)
= f.input :amount, required: false

但这给了我错误:

undefined method `all_currencies' for #<#<Class:0xd154124>:0xd15bab4>

为什么?

附言

我想显示 ISO 代码和名称,如United States Dollar (USD).

4

3 回答 3

14

不确定这是最好的解决方案,但是我做了一个这样的助手:

  def currency_codes
    currencies = []
    Money::Currency.table.values.each do |currency|
      currencies = currencies + [[currency[:name] + ' (' + currency[:iso_code] + ')', currency[:iso_code]]]
    end
    currencies
  end
于 2015-03-30T11:42:06.460 回答
4

最简单的解决方案:

= f.select :currency, Money::Currency.table
于 2018-12-17T11:42:59.577 回答
2

您的 all_currencies 方法是一个实例方法,并且您没有在实例上调用它。

添加self.all_currencies,然后调用它Price.all_currencies

希望这可以帮助

于 2014-08-15T23:42:00.063 回答