Ruby on rails 将错误值更新到数据库

Ruby on rails 将错误值更新到数据库,ruby-on-rails,ruby,Ruby On Rails,Ruby,我只是尝试从2000年开始将一条记录增加1,当单击创建操作创建一条记录时,会创建一条新记录: 如果resource\u model==Student,则@resource.testing\u id=id+2000结束 因此,如果记录的id为1,我假设测试id为2001。但相反,它返回: 2147483647(最大mysql限制?) 有没有关于如何解决这个问题的建议?谢谢。2147483647=2^(32-1) 你能在这里展示一下你的代码吗 从这里我猜你是在比较苹果和草莓。 我认为您在字符串上添加

我只是尝试从2000年开始将一条记录增加1,当单击创建操作创建一条记录时,会创建一条新记录:

如果resource\u model==Student,则@resource.testing\u id=id+2000结束

因此,如果记录的id为1,我假设测试id为2001。但相反,它返回: 2147483647(最大mysql限制?)

有没有关于如何解决这个问题的建议?谢谢。2147483647=2^(32-1) 你能在这里展示一下你的代码吗

从这里我猜你是在比较苹果和草莓。 我认为您在字符串上添加了“1”,这意味着例如:

2000+1=20001 20001+1=200001

因此,如果您这样做几次,这意味着您将获得int的最大大小(21475483647)。我不能百分之百确定这一点,但这与你问问题的方式以及你不发布代码的方式有关。。。
我希望这个编辑对您有帮助。

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

  • 在创建过程中无法知道记录ID。保存记录do数据库后,ID是已知的

  • 你不能依靠ID给你像1,2,3这样的值。。。等等

  • 不要像ID+2000那样存储值,因为您可以通过计算ID+2000随时获取它

  • 您可以通过以下方式获得下一个
    测试\u id

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

    但是如果两个进程同时获取相同的值,那么您将有重复的
    测试\u id

    这个:如果resource\u model==Student,那么@resource.testing\u id=@resource.id+3000 end会返回这样一个结果:当你没有预料到它时,你有一个nil对象!您可能期望数组的一个实例。计算nil时出错。+Ah,您正在创建@resource。正如klew所说,在你保存它之前,它不会有ID。同意克莱的回答。这很好。这是:如果resource\u model==Student,那么@resource.testing\u id=resource.first(:order=>“testing\u id DESC”)。testing\u id+1 end返回以下内容:未初始化的常量RestfulControllerActions::InstanceMethods::resource您所说的资源到底是什么意思?请注意,这是集中的代码,不是在特定的控制器中,而是在所有控制器继承的控制器中。因此资源_模型是指当前控制器的模型。在本例中,是student。好的,将资源更改为student。在Rails中,变量的名称通常与从中获取记录的模型的名称相同,因此我自动认为您在某个地方有
    @resource=resource.create
    或类似的内容:)是的,我将其更改为student:如果resource\u model==student,那么@resource.testing\u id=student.first(:order=>“testing\u id DESC”).testing_id+1 end但这也会返回:2147483647转到您的控制台并键入:
    Student.first(:order=>“testing_id DESC”)。testing_id
    并查看它为您提供了什么。可能您已经用testing_id保存了一些记录,比如
    2147483647
    ,这就是为什么它再次为您提供该值的原因Hanks,您是对的。但是如果我在学生表中创建第一条记录:if resource\u model==Student然后@resource.testing\u id=if Student.id==1 2000 else Student.first(:order=>“testing\u id DESC”).testing_id+1 end此返回:当您没有预料到它时,您有一个nil对象!评估nil.testing_iddef create_common@resource=yield params[resource_params_key]时出错。以上内容仅捕获用户输入。将其视为params[:student],然后将其分配给实例变量@resource。如果resource_model==Student,那么@resource.testing_id=resource.first(:order=>“testing_id DESC”)。testing_id+1 end#上面的代码就是问题所在。如果我用Resource_model(Student)替换Resource,那么它仍然返回:2147483647。我尝试使用这个:2^(32-1),它仍然返回2147483647。如果保存资源(@resource),你的评论完全没有用处。这是不可读的。如果您想添加一些代码,请编辑您的问题,将您的代码放在那里并正确格式化(在每个代码行前添加四个空格,或使用101按钮)def create_common@resource=yield params[resource_params_key]#以上内容仅捕获用户输入。将其视为params[:student],然后将其分配给实例变量@resource。如果resource_model==Student,那么@resource.testing_id=Student.first(:order=>“testing_id DESC”)。testing_id+1 end respond_to do | format |如果save_resource(@resource)希望这更具可读性。呃…:)请编辑您的问题,不要将其添加为评论