0

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,

これらは 3 つのチェック ボックスで、オーバーライドが '1' であるかどうかを確認するために使用されていることがわかります。

下の 2 つのチェック ボックスは正しく機能しますが、上のチェック ボックスは機能しません。一番上のものをチェックしてスクリプトを実行すると、AS400 からのデータが読み込まれないときに、データが読み込まれます。下の 2 つは正しく機能し、チェックするとデータを無視します。

データベースをチェックして見た1,1,1ので、すべて問題ないようです。

私が見ていないもののアイデアはありますか?

4

1 に答える 1

0

通常、データベース内のフィールドが「int」などの特定の型に設定されている場合、データベース ドライバーまたは ORM はそれを尊重し、値を言語に適した型に変換/キャストします。

Ruby では、Active Record、MySQL、PostgreSQL のドライバー/宝石、または Sequel ORM を使用して、整数を取得できます。データベースとの対話に何を使用しているのかはわかりませんが、すべてを文字または文字列として返すのではなく、値を強制的に 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 がブール値をサポートしていない可能性があります。

于 2013-07-10T20:56:53.183 に答える