我们正在运行一个脚本,它从我们的AS400中提取信息并将数据插入我们的数据库。
在我们的管理控制面板中,我们有一些覆盖复选框。选中这些框后,在产品表中设置“1”。这允许我们覆盖发送的数据,无论多长时间检查:
# check for WEBDB name override flag
if webdb_itm['override_name_and_description'] == '1'
as400_itm[product_map['name']] = webdb_itm['name']
as400_itm[product_map['description']] = webdb_itm['description']
end
# check for WEBDB price sheet sub category override flag
if webdb_itm['override_category'] == '1'
as400_itm[product_map['ps_sub_category_id']] = webdb_itm['ps_sub_category_id']
end
# check for WEBDB as400 sub category override flag
if webdb_itm['override_as_sub_category'] == '1'
as400_itm[product_map['as_sub_category_id']] = webdb_itm['as_sub_category_id']
end
这是一个SQL转储,因此您可以看到数据库中的数据相同:
override_category tinyint(1) DEFAULT NULL,
override_as_sub_category tinyint(1) DEFAULT NULL,
override_name_and_description tinyint(1) DEFAULT NULL,
这是三个复选框,您可以看到他们都在查看覆盖是否为“1”。
底部的两个复选框正常工作,但顶部的复选框没有。如果检查了最上面的一个并运行了脚本,它将在不应该填充AS400的数据时填充它们。底部的两个工作正常,当检查时,他们只是忽略数据。
我检查了数据库并看到了1,1,1
,所以一切都很好。
关于我没有看到的任何想法?
答案 0 :(得分:0)
通常,如果您将数据库中的字段设置为某种类型(例如“int”),则您的数据库驱动程序或ORM将尊重该字段并将值强制/转换为该语言的相应类型。
在Ruby中,使用Active Record或MySQL或PostgreSQL驱动程序/ gems或续集ORM,您将获得Integers。你没有说你正在使用什么来与数据库交谈,但它应该将值强制转换回它们的Ruby等价物,而不是将所有内容作为字符或字符串返回。如果它是一个内部编写的工具,那么有一个功能请求在等待。
这意味着,您的代码需要与整数进行比较:
if webdb_itm['override_name_and_description'] == 1
as400_itm[product_map['name']] = webdb_itm['name']
as400_itm[product_map['description']] = webdb_itm['description']
end
# check for WEBDB price sheet sub category override flag
if webdb_itm['override_category'] == 1
as400_itm[product_map['ps_sub_category_id']] = webdb_itm['ps_sub_category_id']
end
# check for WEBDB as400 sub category override flag
if webdb_itm['override_as_sub_category'] == 1
as400_itm[product_map['as_sub_category_id']] = webdb_itm['as_sub_category_id']
end
也就是说,使用整数来表示布尔值,这是复选框所代表的(打开/关闭)是错误的,但这可能是遗留事物,或者您的AS400 DBM可能不支持布尔值。