2014-01-16 2 views
2

Я хочу разрешить пользователям изменять валютную единицу на всей своей учетной записи.Установить единицу для number_to_currency с настройкой пользователя?

Очевидный способ сделать это, чтобы передать параметр unit в number_to_currency, но данный number_to_currency используется в сотни раз по всему приложению, это кажется немного повторы, чтобы сделать это.

Итак, есть ли способ изменить, какое устройство используется для всех экземпляров number_to_currency на основе настроек, хранящихся в базе данных для каждого пользователя?

+0

Вам нужно просто изменить символ валюты или преобразовать тоже? –

ответ

8

Звуки для меня, как вам нужно какое-то глобальной функции/переменной определить символ

Я хотел бы сделать это следующим образом:

#app/helpers/application_helper.rb 
def unit 
    User.find(current_user.id).select(:currency_type) #I don't know how your units are stored - you may need logic to return the correctly formatted unit 
end 

Это позволит вам позвонить: <%= number_to_currency, unit: unit %>


Переопределение Помощник Метод

number_to_currency буквально только сам помощник, который означает, что вы можете добавить параметры на лету:

Оригинальное

# File actionpack/lib/action_view/helpers/number_helper.rb, line 106 
     def number_to_currency(number, options = {}) 
     return unless number 
     options = escape_unsafe_delimiters_and_separators(options.symbolize_keys) 

     wrap_with_output_safety_handling(number, options.delete(:raise)) { 
      ActiveSupport::NumberHelper.number_to_currency(number, options) 
     } 
     end 

дополненного

#app/helpers/application_herlper.rb 
    def number_to_currency(number, options ={}) 
     unit = User.find(current_user.id).select(:currency_type) 
     options[:unit] = unit unless options[:unit].present? 
     super 
    end 
+0

Да, как я уже упоминал, это то, чего я надеялся избежать ... установка параметра 'unit' за один раз я использую' number_to_currency'. – Shpigford

+0

Обновление ответа –

+0

Обновленный ответ для вас –

3

Вы могли бы передать валюту в качестве опции к number_to_currency, как показано ниже:

number_to_currency(1234567890.506, locale: :fr) 

В этом случае вам нужно будет заменить :fr в любые точки для настройки пользователя и создать такую ​​локаль с такими опциями:

number: 
    currency: 
    format: 
     unit: '€' 
     format: '%n %u' 
     separator: "," 
     delimiter: "." 
     precision: 2 
     significant: false 
     strip_insignificant_zeros: false 

Или вы установили устройство по-другому:

number_to_currency(1234567890.50, unit: "&pound;", format: "%u %n") 
=> "&pound; 1.234.567.890,50" 

Надеюсь, это поможет вам.

Смежные вопросы