0

Ruby 1.8.7 と Rails 2.3.5 を実行している Ruby on Rails アプリケーションのメンテナンスを行っています。使用するデータベースは MySQL です。

モデルの 1 つで非常に奇妙なバグに遭遇しました。保存する前は、id は nil です (データベースへの保存によってまだ割り当てられていないため)。次に、 @model.save を実行するとレコードがデータベースに保存されますが、@model.id を呼び出すと、データベースで割り当てられた ID (4000235410) ではなく、負の値 (-294731885) が返されます。

デバッグするために、以下を shopping_cart モデルに追加しました。

before_save :print_object_before
after_save :print_object_after

def print_object_before
  logger.debug "ShoppingCartBeforeSave: " + self.inspect
end

def print_object_after
  logger.debug "ShoppingCartAfterSave: " + self.inspect
end

私のコントローラーでは、次のように呼び出します。

@shopping_cart.save!

ログに出力される出力は次のとおりです。

ShoppingCartBeforeSave: #<ShoppingCart id: nil, user_id: 4000001127, created_at: nil, updated_at: nil, currency_code: "zar", coupon_code: nil>
ShoppingCartAfterSave: #<ShoppingCart id: -294731885, user_id: 4000001127, created_at: "2012-09-25 12:02:05", updated_at: "2012-09-25 12:02:05", currency_code: "zar", coupon_code: nil>

何が問題になる可能性がありますか?モデルで定義された他の前フィルターまたは後フィルターはありません。MySQL で ID が不足している可能性があると思いましたが、Rails で異なる値を返すにもかかわらず、データベースにレコードを正しく (正の ID で) 保存しているため、そうではありません。(参考までに、モデルの移行では、id は整数として定義されます。)

いくつかの詳細情報: 負の値の値が増加し続けているようです (より小さい負)。たとえば、1 回の試行では ID に -294731885 が含まれ、次の試行では -294731884 が含まれ、次の試行では -294731883 が含まれます。

4

1 に答える 1

0

これについてはよくわかりませんが、id列のタイプに問題がある可能性があります。これは、取得している数値を保持するのに十分な大きさではないようです。たぶん問題はルビー側にあります。適切なバージョンがインストールされておらず、リレーショナルデータベースの経験が十分でないため、確信が持てません。お役に立てれば !

于 2012-09-25T14:15:42.127 に答える