2011-08-05 104 views
3

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

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

我不知道是否有更好的方式保存到数据库作为整数事先取出值美元符号?

这里是我的代码:

bids_controller.rbcreate行动,这样做将使数据库无法正常形式保存价值$1000

# Remove dollar sign 
    if params[:bid][:dollars][0] == "$" 
     params[:bid][:dollars] = params[:bid][:dollars].delete('$') 
    end 

    @bid = Bid.new(params[:bid]) 
    @bid.save 

但是,如果我要删除来自控制器的if-end片段并清除Bid型号中的数据,如下所示:

before_save :clean_data 

    def clean_data 
     puts self.dollars 
     self.dollars = self.dollars.delete('$') 
    end 

clean_data方法有机会删除美元符号之前,我将获得值为0puts self.dollars

我的假设是轨道试图要么clean_datasave之前为“持有”,在数据库中的数据被调用,而这个“持有”导致自整列不能够将数据转换为0保存美元符号。

非常感谢您的帮助! :)

+0

请出示在这个问题你的代码,因为它听起来就像你做的很好。 – lucapette

+0

嗨,我只是更新我的问题,包括代码。感谢您的帮助! –

+0

@MingC你找到解决方案吗?的 – Luccas

回答

0

看看在tr方法。

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

您应该能够在将字符串变量保存到数据库之前对其进行此操作。

+0

Yeaps。我刚刚更新了我的问题以包含代码。我认为我的'.delete('$')'和'.tr'具有相同的效果。谢谢! –