フォーム内でローカライズされたコンテンツを使用しようとすると、同様の問題が発生しました。出力ActionView::Helpers::NumberHelper
のローカライズは組み込みメソッドを使用すると比較的簡単ですが、ローカライズされた入力の解析は ではサポートされていませんActiveRecord
。
これが私の解決策です。何か間違っていることがあれば教えてください。正しい解決策であるには単純すぎるように思えます。ありがとう!:)
まず、 にメソッドを追加しましょうString
。
class String
def to_delocalized_decimal
delimiter = I18n::t('number.format.delimiter')
separator = I18n::t('number.format.separator')
self.gsub(/[#{delimiter}#{separator}]/, delimiter => '', separator => '.')
end
end
次に、クラスメソッドを追加しましょうActiveRecord::Base
class ActiveRecord::Base
def self.attr_localized(*fields)
fields.each do |field|
define_method("#{field}=") do |value|
self[field] = value.is_a?(String) ? value.to_delocalized_decimal : value
end
end
end
end
最後に、入力をローカライズする必要があるフィールドを宣言しましょう。
class Article < ActiveRecord::Base
attr_localized :price
end
ここで、フォームに「1.936,27」と入力するActiveRecord
と、1936.27 になるため、無効な番号でエラーが発生することはありません。