更新数据库的错误值

时间:2010-02-03 13:13:41

标签: ruby-on-rails ruby

我只是试图从2000年开始将记录增加1,当时点击创建操作创建新记录以创建记录:

如果resource_model ==学生,那么@ resource.testing_id = id + 2000 end

因此,如果记录的id为1,我认为testing_id将是2001.但它返回: 2147483647(最大mysql限制?)

有关如何解决此问题的任何建议?感谢。

3 个答案:

答案 0 :(得分:1)

  1. 创建期间无法识别记录ID。保存记录数据库后,ID已知。

  2. 您无法在ID上转发,为您提供1,2,3等等的值。

  3. 不要存储ID + 2000之类的值,因为你可以通过计算id + 2000来随时获取它。

  4. 您可以通过以下内容获得下一个testing_id

    if resource_model == Student then
      @resource.testing_id = Student.first(:order => "testing_id DESC").testing_id + 1
    end
    

    但如果两个进程同时获取相同的值,那么您将有重复的testing_id

答案 1 :(得分:0)

2147483647 = 2 ^(32-1) 你能在这里展示一些代码吗?

从我猜测的是,你正在将苹果与草莓进行比较:P。 我认为你在字符串上添加“1”,这意味着例如:

2000 + 1 = 20001 20001 + 1 = 200001

因此,如果您这样做了几次,这意味着您将达到int的最大大小(21475483647)。我不知道这是100%肯定,但这与您提出问题的方式和不发布代码的方式等有关... 我希望这个编辑很有帮助。

答案 2 :(得分:0)

Object.id f是一个(不推荐使用的)方法,它返回唯一标识对象的Ruby对象ID。 Rails已覆盖id,因此模型中的引用数据库主键。我将猜测你的代码片段来自一个控制器,这就是id返回一个奇怪的大数字的原因:它是控制器的Ruby对象id,而不是对象的主键。给id一个接收器,例如@resource.id,看看它是如何运作的。