как получить символ из денежного камня - PullRequest
1 голос
/ 07 ноября 2011

Я использую денежный камень для представления денежных полей в моей модели продукта. Вот мой код:

Модель продукта:

          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
...