数据库以英语和格式的值播种,例如:hourlyrate => 20.90。首次启动时(语言默认为英语),输入表单会正确显示字段的内容。我可以修改并保存,没问题。 如果我切换到德语,则数字正确显示为20,90。如果我在此表单上编辑任何内容,则无法再次保存,因为验证会将该数字视为无效。
我的问题是,在保存之前我是否必须在控制器中执行更正,或者我是否错过了Rails的一些内置函数?
代码的相关部分
助手:
def my_number_with_precision(value)
if value
# value
number_with_precision(value, :precision => 2)
end
end
验证:
validates :hourlyrate, :numericality => { :greater_or_equal_than => 0, :message => " is an invalid number or below zero" }
形式:
<div class="input">
<%= f.text_field :hourlyrate, :value => my_number_with_precision(f.object.hourlyrate) %>
</div>
的Gemfile
gem 'rails-i18n'
答案 0 :(得分:0)
我提出了以下解决方案之一 - 语言特定代码:
def parse_i18n(value)
if I18n.locale = 'de'
value.gsub(',', '.')
else
value
end
end
def parse_i18n(value)
value.gsub(I18n.t("number.currency.format.unit"),'').
gsub(I18n.t("number.currency.format.delimiter"), '').
gsub(I18n.t("number.currency.format.separator"), '.')
end