我的型号产品包含字段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 = ...)?
答案 0 :(得分:1)
我有同样的问题。 Setting currency with form select with Money gem
通过在create方法中添加一行来解决它。检查上面的主题,让我知道你需要进一步的帮助。