Я использую денежный камень для представления денежных полей в моей модели продукта.
Вот мой код:
Модель продукта:
composed_of :price,
:class_name => "Money",
:mapping => [%w(price cents), %w(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") }
- В моей модели есть поля типа валюты в виде строки и цены в виде строки.
В моем виде :
<li>
<%= f.select(:currency,all_currencies(Money::Currency::TABLE), {:include_blank => 'Select a Currency'}, :class => "styled" )%>
</li>
По моему Помощник по продуктам
def all_currencies(hash)
hash.inject([]) do |array, (id, attributes)|
array ||= []
array << [attributes[:name], attributes[:iso_code]]
array
end
end
- Когда я пытаюсь напечатать product.currency, на мой взгляд, я получаю правильную валюту. Например, для индийских рупий я получаю INR. Но я не знаю, как извлечь из него символ.
- Я пытался использовать product.symbol и product.currency.symbol, но получаю «неопределенный символ метода»
Любая помощь очень ценится.
===== Решение: ====
Внутри моего вспомогательного метода мне нужно было получить атрибут [: symbol] в массиве.
def all_currencies(hash)
hash.inject([]) do |array, (id, attributes)|
array ||= []
array << [attributes[:name], attributes[:iso_code],attributes[:symbol]]
array
end
end