rails 3.0.5项目中逗号分隔的数字

时间:2012-02-10 17:43:54

标签: ruby ruby-on-rails-3

在我的rails项目中,我有一个输入金额的表单。此数量作为整数存储在mysql数据库中。

<%=f.label :Amount%><br/>
<%=f.text_field :amount%>

如果用户使用“。”输入号码。分隔符如2034.34,效果很好。我的问题是有人使用“,”,如2,034。此数字在数据库中仅作为2存储。如何使用逗号和小数分隔符来获取应用程序存储号码?

更新

Nkm放在正确的轨道上,但我得到了一个太深的错误。我最终使用

def amount=(amt)

  write_attribute(:amount,amt.gsub(",", ""))
end

3 个答案:

答案 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