脚本问题没有意义

时间:2013-07-10 17:47:14

标签: sql ruby

我们正在运行一个脚本,它从我们的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,所以一切都很好。

关于我没有看到的任何想法?

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可能不支持布尔值。