如何正确使用表单生成器的金钱宝石?

时间:2011-10-27 21:43:58

标签: ruby-on-rails currency

我的型号产品包含字段price_cents和price_currency。货币默认货币为美元。

型号:

class Product < ActiveRecord::Base
  CURRENCIES = %w(USD EUR)

  composed_of :price,
              :class_name => "Money",
              :mapping => [%w(price_cents cents), %w(price_currency currency_as_string)],
              :constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency || Money.default_currency) },
              :converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") }
end

形式:

= form_for @product do |f|
  = f.label :price
  = f.text_field :price
  = f.select :price_currency, Product::CURRENCIES

  = f.submit

控制器创建方法:@ product = Product.new(params [:product])

问题:当用户将price字段设置为100,例如price_currency设置为EUR时,它会使用默认货币(USD)创建价格。我怎么解决它?是可以在视图中执行它还是我应该在控制器中执行它(例如@ product.price.currency = ...)?

1 个答案:

答案 0 :(得分:1)

我有同样的问题。 Setting currency with form select with Money gem

通过在create方法中添加一行来解决它。检查上面的主题,让我知道你需要进一步的帮助。