Rails - 编辑视图 - 无法保存到MySQL:使用number_to_currency帮助程序的十进制

时间:2014-04-02 17:09:53

标签: ruby-on-rails ruby view number-to-currency

我有2个数据库列(使用mysql)一个十进制(10,2),另一个是字符串。

迁移看起来像。

t.decimal :PRICE, precision: 10, scale: 2
t.string :TOTALTAX

在_form.html.erb部分中,我使用number_to_currency帮助程序进行以下操作。

<div class="form-group">
    <%= f.label :PRICE %>
    <br>
    <%= f.text_field :PRICE, :value => number_to_currency(f.object.PRICE, :precision => 2), :class=>'form-control' %>
</div>
<div class="form-group">
    <%= f.label :TOTALTAX %>
    <br>
    <%= f.text_field :TOTALTAX, :value => number_to_currency(f.object.TOTALTAX, :precision => 2), :class=>'form-control' %>
</div>

开始我在TOTALTAX字符串中有“3429.65”,在十进制中有“189900.00”。

当我在编辑视图中使用partial时。一切都呈现出你所期望的和我的数字。在他们的领域,看起来很漂亮,这就是我想要的。易于阅读。

但是,当我将表单提交给编辑(更新)时,我的字符串保存到数据库为“$ 3,429.65”,这没关系,但我的小数保存为“0.00”。我的数据怎么了?

其次,如果我返回并重新进入编辑视图,我的小数(PRICE)显然显示为“$ 0.00”,但现在我的字符串(TOTALTAX)显示为“$$ 3,429.65”。每当我重新进入视图并更新时,它就会一直在前面加上$符号。

思想???

我尝试在模型中使用before_save挂钩但没有成功,代码看起来像。

before_save :strip_currency
def strip_currency
   self.PRICE = self.PRICE.to_s.gsub(/[$,]/,"").to_d
   self.TOTALTAX = self.TOTALTAX.to_s.gsub(/[$,]/,"")
end

1 个答案:

答案 0 :(得分:0)

我讨厌这样做,但它有效。我仍然愿意接受其他解决方案。

在控制器中,我劫持了参数,剥去了任何$和符号,并将我的黑客参数哈希发送到.update方法。

def update
  respond_to do |format|
    removecurrency = deals_params
    removecurrency['PRICE'] = removecurrency['PRICE'].to_s.gsub(/[$,]/,"")
    removecurrency['TOTALTAX'] = removecurrency['TOTALTAX'].to_s.gsub(/[$,]/,"")
    removecurrency['SAFECOMP'] = removecurrency['SAFECOMP'].to_s.gsub(/[$,]/,"")
    if @deals.update(removecurrency)
      format.html { redirect_to @deals, notice: 'Deal was successfully updated.'}
      format.json { head :no_content }
    else
      format.html { render action: 'edit' }
      format.json { render json: @deals.errors, status: :unprocessable_entity }
    end
  end
end