我只是试图从2000年开始将记录增加1,当时点击创建操作创建新记录以创建记录:
如果resource_model ==学生,那么@ resource.testing_id = id + 2000 end
因此,如果记录的id为1,我认为testing_id将是2001.但它返回: 2147483647(最大mysql限制?)
有关如何解决此问题的任何建议?感谢。
答案 0 :(得分:1)
创建期间无法识别记录ID。保存记录数据库后,ID已知。
您无法在ID上转发,为您提供1,2,3等等的值。
不要存储ID + 2000之类的值,因为你可以通过计算id + 2000来随时获取它。
您可以通过以下内容获得下一个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
,看看它是如何运作的。