我想允許用戶在整個賬戶中更改貨幣單位。用戶設置爲number_to_currency設置單位?
明顯的做法是將unit
參數傳遞給number_to_currency
,但是由於number_to_currency
在整個應用程序中使用了數百次,似乎有點重複這樣做。
所以是有一些方法來改變基於存儲在數據庫中爲每個用戶設置使用什麼單位的number_to_currency
所有實例?
我想允許用戶在整個賬戶中更改貨幣單位。用戶設置爲number_to_currency設置單位?
明顯的做法是將unit
參數傳遞給number_to_currency
,但是由於number_to_currency
在整個應用程序中使用了數百次,似乎有點重複這樣做。
所以是有一些方法來改變基於存儲在數據庫中爲每個用戶設置使用什麼單位的number_to_currency
所有實例?
聽起來像你對我需要某種形式的全局函數/變量定義符號
我會做這樣的:
#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
是的,就像我剛纔提到的那樣,這是我希望避免的......設置'unit'參數曾經一次使用'number_to_currency'。 – Shpigford
更新應答 –
更新爲你解答 –
你可以通過貨幣作爲一個選項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: "£", format: "%u %n")
=> "£ 1.234.567.890,50"
希望這可以幫助你。
你只是需要更改貨幣符號,或過於轉換? –