我的数据库表中有一个名为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_data
或clean_data
之前,rails试图“保留”数据库中的数据,而这种“保持”会导致数据转换为{{1因为整数列无法保存美元符号。
非常感谢你的帮助! :)
答案 0 :(得分:0)
查看tr
方法。
"$1000".tr("$", "") # => "1000"
在将字符串变量保存到数据库之前,您应该可以对它进行此操作。