ruby-on-rails - Ruby on Rails - 货币 : commas causing an issue

标签 ruby-on-rails decimal numbers currency

查看 SO,我发现使用 RoR 货币的首选方法是使用 decimal(8,2) 并使用 number_to_currency() 输出它们;

我可以从数据库中取出我的号码,但我在将它们输入时遇到了问题。

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

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

参数转储显示正确的值。 xx,yyy.zz ,但存储在数据库中的只是 xx.00

我需要做什么才能考虑到可能存在逗号并且用户可能不会输入 .zz(美分)。一些正则表达式和逗号?如果小数点是 .2 与 .20,你会如何处理。

必须有内置的或至少是更好的方法。

我的迁移(我不知道这是否有帮助):

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

最佳答案

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

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

关于ruby-on-rails - Ruby on Rails - 货币 : commas causing an issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2134903/

相关文章:

ruby-on-rails - 设计重置密码 POST 而不是 PUT

javascript - 为什么我的值(value)四舍五入(向上或向下)

json - 确定 JSON 解析错误的位置

ruby-on-rails - 我应该在 rspec 中使用什么类型的 "assert"来验证先决条件是否正常?

ruby-on-rails - Googlebot 收到现有模板的缺失模板错误

sql - 在 SQL 查询中转义单引号

javascript - 在 JavaScript 中使用带小数点的 float 的最佳方法是什么?

十进制转32位二进制

mysql - ORDER BY 字符串(可以是数字或字符串)将空字符串放在最后 MySQL

java - 如何查找一个数字是否具有这种格式的表示形式?