2010-11-16 102 views
1

因此,情況如下:一個帶有兩個成語的導軌應用程序,其中一個用戶使用格式5,000.40來編寫數字(標準英語),另一個使用5.000,40如何處理歐洲數字格式的軌道形式?

現在的問題是,我該如何處理?我使用i18n幫助器來處理輸出,但我不知道如何在我的rails控制器中處理這些數字。

回答

2

這是我做過什麼來得到這個工作:

內的初始化:

class ActiveRecord::Base 

    class << self 

    def handle_internationalization_numbers_for(*fields) 
     fields.each do |field_name| 
     define_method "#{field_name}=" do |other| 
      if valid_number?(other) 
      write_attribute(field_name, other) 
      else 
      # try converting it to a proper number 
      write_attribute(field_name, other.tr(".,", ",.")) 
      end 
     end 
     end 
    end 

    end 

    private 

    def valid_number?(number) 
    number.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true 
    end  

end 

然後在您的機型:

handle_internationalization_numbers_for :field_1, :field_2 
+0

您可以將'valid_number?'重寫爲:http://hastebin.com/topidodaxo.rb – 2015-07-15 10:42:41

0

使用本地化方法

=l record.amount 

,並在區域文件中定義的特定格式。

+0

我要的是處理輸入,而不是輸出。我已經這麼做了 – 2010-11-16 22:31:36

+0

那麼你應該用逗號替換點和點的逗號? – Lichtamberg 2010-11-18 17:14:49