代码之家  ›  专栏  ›  技术社区  ›  easement

RubyonRails-货币:逗号导致问题

  •  2
  • easement  · 技术社区  · 16 年前

    在我的更新操作中,我有以下行:

    if @non_labor_expense.update_attributes(params[:non_labor_expense]) 
    puts YAML::dump(params) 
    

    必须有一个内置的或至少是更好的方式。

    class ChangeExpenseToDec < ActiveRecord::Migration
        def self.up
           change_column :non_labor_expenses, :amount, :decimal, :precision => 8, :scale => 2
        end
    
        def self.down
              change_column :non_labor_expenses, :amount, :integer
        end
    end
    
    4 回复  |  直到 16 年前
        1
  •  6
  •   Daniel Vandersluis    16 年前

    before_save before_validation 可能是过滤器),然后在显示数字时,将逗号添加回。

    before_validation :strip_commas_from_non_labor_expense
    
    def strip_commas_from_non_labor_expense
      self.non_labor_expense = self.non_labor_expense.to_s.gsub(/,/, '').to_f
    end
    

    number_to_currency 如前所述,当您希望显示以逗号分隔的组和两位小数格式的费用金额时:

    <%
      non_labor_expense = ... # get value from your model
      puts number_to_currency(non_labor_expense, :precision => 2, :separator => ',')
    %>
    
        2
  •  8
  •   Guy C    16 年前

    我尝试了Daniel在验证前的想法,但我就是无法让它发挥作用。当我到达之前的验证时,输入似乎已经被转换了。我采用的解决方案是重写列的方法,并去掉其中的逗号:

    def profit=(num)
      num.gsub!(',','') if num.is_a?(String)
      self[:profit] = num
    end