gpt4 book ai didi

ruby - 无法将数字 DataMapper 字段设置为空值

转载 作者:数据小太阳 更新时间:2023-10-29 08:05:30 25 4
gpt4 key购买 nike

我似乎无法找到任何方法来成功地将表单中的小数字段设置为无值,因为表单返回的是空字符串。这是一个 super 简单的测试用例,手动将字段设置为 ''

require 'dm-core'
require 'dm-mysql-adapter'
require 'dm-migrations'

DataMapper.setup(:default, 'mysql://localhost/test')

class Product
include DataMapper::Resource
property :id, Serial

property :list_price, Decimal
end

DataMapper.finalize

DataMapper.auto_migrate!

p = Product.new
puts p.save #=> true

p = Product.new(:list_price => '')
puts p.save #=> false

p = Product.new(:list_price => nil)
puts p.save #=> true

如您所见,list_price 字段在未设置或设置为 nil 时会愉快地保存。但是,当我使用空白字符串时,它根本不会保存——它似乎没有被类型转换。

看来我必须在这里遗漏一些明显的东西,因为这是 ORM 的一个非常基本的用例。

最佳答案

您可以为属性创建自己的设置方法来检查其类型。请参阅 Datamapper properties documentation page 上的“覆盖访问器”部分.

添加:

def list_price=(new_price)
new_price = nil if new_price == ''
super
end

您的 Product 类将导致任何空字符串被设置为 list_price 的值被转换为 nil,并允许保存资源。

关于ruby - 无法将数字 DataMapper 字段设置为空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9574478/

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