gpt4 book ai didi

ruby-on-rails - rails 中的无效小数变为 0.0

转载 作者:行者123 更新时间:2023-12-04 06:19:13 24 4
gpt4 key购买 nike

我有以下 rails 模型:

class Product < ActiveRecord::Base
end

class CreateProducts < ActiveRecord::Migration
def self.up
create_table :products do |t|
t.decimal :price

t.timestamps
end
end

def self.down
drop_table :products
end
end

但是当我在 rails 控制台中执行以下操作时:
ruby-1.9.2-p180 :001 > product = Product.new
=> #<Product id: nil, price: nil, created_at: nil, updated_at: nil>
ruby-1.9.2-p180 :002 > product.price = 'a'
=> "a"
ruby-1.9.2-p180 :003 > product.save
=> true
ruby-1.9.2-p180 :004 > p product
#<Product id: 2, price: #<BigDecimal:39959f0,'0.0',9(9)>, created_at: "2011-05-18 02:48:10", updated_at: "2011-05-18 02:48:10">
=> #<Product id: 2, price: #<BigDecimal:3994ca8,'0.0',9(9)>, created_at: "2011-05-18 02:48:10", updated_at: "2011-05-18 02:48:10">

如您所见,我写了“a”,它在数据库中保存了 0.0。这是为什么?这特别烦人,因为它绕过了我的验证,例如:
class Product < ActiveRecord::Base
validates :price, :format => /\d\.\d/
end

最佳答案

如果您对其调用 to_f,任何无效的内容都会被强制转换为 0.0
"a".to_f #=> 0.0
您需要使用模型中的验证来检查它
validates_numericality_of :price # at least in rails 2 i think
我不知道按格式验证有什么作用,所以我不能帮你,但尝试验证它是一个数字,正则表达式只检查字符串,所以如果数据库是一个数字字段,它可能会搞砸

:format 用于检查电子邮件地址、登录名、姓名等内容,以检查非法字符等

关于ruby-on-rails - rails 中的无效小数变为 0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6039378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com