У меня есть модель Product с полями price_cents и price_currency. Валюта по умолчанию для денег - USD.
Модель:
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])
Проблема: когда пользователь устанавливает для поля цены, например, 100, а для price_currency - EUR, цена создается в валюте по умолчанию (USD). Как я могу это исправить? Можно ли сделать это на виду или я должен сделать это в контроллере (например, @ product.price.currency = ...)?