0

我正在对运行 Ruby 1.8.7 和 Rails 2.3.5 的 Ruby on Rails 应用程序进行一些维护。使用的数据库是 MySQL。

我在我的一个模型上遇到了一个非常奇怪的错误。在保存之前,id 为 nil(因为尚未通过保存到 db 来分配它)。然后,当我执行@model.save 时,它​​会将记录保存在数据库中,但是当我调用@model.id 时,它会返回一个负值(-294731885),而不是在数据库中分配给它的 id(4000235410)。

为了调试,我在我的 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 定义为整数。)

更多信息:似乎负值的值不断增加(较小的负值),例如,在一次尝试中,id 将包含 -294731885,在下一次尝试时将包含 -294731884,在下一次尝试时将包含 -294731883,等等。

4

1 回答 1

0

我不确定这一点,但您的id列类型可能存在问题,它似乎不足以容纳您获得的数字。也许问题出在红宝石方面。我无法确定,因为我没有安装正确的版本,也没有足够的关系数据库经验。希望这可以帮助 !

于 2012-09-25T14:15:42.127 回答