在我的rails项目中,我有一个输入金额的表单。此数量作为整数存储在mysql数据库中。
<%=f.label :Amount%><br/>
<%=f.text_field :amount%>
如果用户使用“。”输入号码。分隔符如2034.34,效果很好。我的问题是有人使用“,”,如2,034。此数字在数据库中仅作为2存储。如何使用逗号和小数分隔符来获取应用程序存储号码?
更新
def amount=(amt)
write_attribute(:amount,amt.gsub(",", ""))
end
答案 0 :(得分:1)
您要求将金额存储为数据库中格式化的字符串。我认为这是一个非常糟糕的主意:用这个字符串进行计算是很困难的(总和,比较等等)。请改用float
列。
您可以在ActiveRecord模型上使用callback(我希望它们在3.0.5 中可用)在保存之前删除逗号。例如
before_save :format_amount
def format_amount
self.amount.delete! ','
end
使用NumberHelper在您的视图中显示逗号。
答案 1 :(得分:1)
您可以在模型中添加before_save
callback,将逗号转换为点。
before_save { self.amount.gsub!(/\,/, "." }
irb例子:
"2,034".gsub!(/\,/, ".")
# => "2.034"
答案 2 :(得分:1)
由于数据库列为decimal/float
,我们应该在保存之前将数据处理成正确的格式。
您可以使用activerecord
before_save
回调或覆盖该属性的setter方法,如下所示,
#model.rb
def amount=(amt)
self.amount = amt.gsub(",", "")
end