2014-01-16 74 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 %>


重載helper方法

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" 

希望這可以幫助你。