Вот мой подход к этой проблеме ..
# /RAILS_ROOT/lib/app_name/currency_helper.rb
module AppName
module CurrencyHelper
include ActionView::Helpers::NumberHelper
def number_to_currency_with_pound(amount, options = {})
options.reverse_merge!({ :unit => '£' })
number_to_currency_without_pound(amount, options)
end
alias_method_chain :number_to_currency, :pound
end
end
в ваших моделях вы можете сделать это (и вы не будете загрязнять вашу модель методами, которые вы не собираетесь использовать)
class Album < ActiveRecord::Base
include AppName::CurrencyHelper
def price
currency_to_number(amount)
end
end
затем, чтобы ваши представления обновлялись, включите модуль в один из помощников вашего приложения
module ApplicationHelper
# change default currency formatting to pounds..
include AppName::CurrencyHelper
end
Теперь везде, где вы используете число, чтобы поменять валюту, оно будет отформатировано с символом фунта, но у вас также есть вся гибкость оригинального метода rails, поэтому вы можете передавать опции, как вы делали раньше.
number_to_currency(amount, :unit => '$')
преобразует его обратно в символ доллара.