#ruby-on-rails #ruby-on-rails-3 #currency
#ruby-on-rails #ruby-on-rails-3 #Валюта
Вопрос:
Я использую money gem для представления денежных полей в моей модели продукта. Вот мой код:
Модель продукта:
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") }
- В моей модели есть такие поля, как currency в виде строки и price в виде строки.
Я просматриваю свою форму:
<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
Комментарии:
1. Под символом вы подразумеваете $ для доллара и аналогично для INR?
2. да, верно …. но я решил проблему
3. @AnidhyaAhuja Не могли бы вы упомянуть, как вы решили проблему?
4. @SwatiAggarwal решение упомянуто чуть ниже вопроса. Я должен был получить символ вместе с другими атрибутами в помощнике.