在将数据库保存为整数之前清理字符串数据

时间:2011-08-05 18:15:37

标签: ruby-on-rails-3

我的数据库表中有一个名为dollars的整数列,我试图在数据库中保存$1000等值。但是,尝试使用整数列中的美元符号保存字符串$1000将导致自动转换为整数0

为了防止这种情况发生,我尝试在我的模型中为before_save方法添加clean_data回调以删除美元符号。但似乎rails在调用$1000之前已经尝试在数据库中保存整个clean_data字符串。

我想知道在以整数形式保存到数据库之前是否有更好的方法从值中删除美元符号?

这是我的代码:

create的{​​{1}}操作中,执行此操作将允许数据库正确地从表单中保存值bids_controller.rb

$1000

但是,如果我要从控制器中删除if-end片段并清除 # Remove dollar sign if params[:bid][:dollars][0] == "$" params[:bid][:dollars] = params[:bid][:dollars].delete('$') end @bid = Bid.new(params[:bid]) @bid.save 模型中的数据,请执行以下操作:

Bid

before_save :clean_data def clean_data puts self.dollars self.dollars = self.dollars.delete('$') end 方法有机会删除美元符号之前,我会获得0的值puts self.dollars

我的假设是,在调用clean_dataclean_data之前,rails试图“保留”数据库中的数据,而这种“保持”会导致数据转换为{{1因为整数列无法保存美元符号。

非常感谢你的帮助! :)

1 个答案:

答案 0 :(得分:0)

查看tr方法。

"$1000".tr("$", "") # => "1000"

在将字符串变量保存到数据库之前,您应该可以对它进行此操作。