обновление неверного значения в базе данных - PullRequest
0 голосов
/ 03 февраля 2010

Я просто пытаюсь увеличить запись на 1, начиная с 2000 года, когда создается новая запись после нажатия на действие создания, чтобы создать запись:

if resource_model == Student затем @resource.testing_id = id + 2000 end

Так что, если запись имеет идентификатор 1, я предполагаю, что testing_id будет 2001. Но вместо этого он возвращает: 2147483647 (максимальный предел mysql?)

Anyпредложения о том, как решить эту проблему?Спасибо.

Ответы [ 3 ]

1 голос
/ 03 февраля 2010
  1. Вы не можете знать идентификатор записи во время создания. Идентификатор известен после сохранения записи в базе данных.

  2. Вы не можете ретранслировать по ID, чтобы получить такие значения, как 1, 2, 3 ... и так далее.

  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.

0 голосов
/ 03 февраля 2010

Object.id f (устаревший) метод, который возвращает идентификатор объекта Ruby, который однозначно идентифицирует объект. Rails переопределил id, поэтому в моделях относится к первичному ключу базы данных. Я собираюсь предположить, что ваш фрагмент кода взят из контроллера, и поэтому id возвращает странное и большое число: это идентификатор объекта Ruby контроллера, а не первичный ключ объекта. Дать идентификатор получателю, например @resource.id, и посмотрите, как это работает.

0 голосов
/ 03 февраля 2010

2147483647 = 2 ^ (32-1) Не могли бы вы показать здесь свой код?

Из того, что я предполагаю, вы сравниваете яблоки с клубникой: P. Я думаю, что вы добавляете «1» к строке, что означает, например:

2000 + 1 = 20001 20001 + 1 = 200001

Так что если вы сделаете это пару раз, это означает, что вы получите максимальный размер типа int (21475483647). Я не знаю это на 100% уверен, но это связано с тем, как вы задаете свой вопрос и как вы не публикуете код и т. Д. Я надеюсь, что это редактирование было полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...