Как правильно использовать деньги в построителе форм? - PullRequest
4 голосов
/ 28 октября 2011

У меня есть модель 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 = ...)?

1 Ответ

1 голос
/ 03 ноября 2011

У меня была такая же проблема. Настройка валюты с помощью выбора формы с помощью Money gem

Решена путем добавления одной строки в метод созданияПроверьте ветку выше, и дайте мне знать, что вам нужна дополнительная помощь по этому вопросу.

...