Как повторно использовать удаленный номер модели в Rails? - PullRequest
1 голос
/ 30 января 2010

Скажем, у меня есть модель Post. Когда я удаляю последнее сообщение «Сообщение 24», я хочу, чтобы следующее сообщение получило идентификатор сообщения 24, а не сообщения 25.

Я хочу показать идентификатор в просмотрах, и я не хочу пропустить номера. Как мне это сделать?

Спасибо за вашу помощь.

Ответы [ 2 ]

5 голосов
/ 30 января 2010

Цель идентификатора - быть не чем иным, как внутренним идентификатором. Это не должно использоваться публично вообще. Это не вещь Rails, а проблема с базой данных. MySQL не будет возвращать идентификаторы, потому что это может привести к очень серьезным осложнениям в вашем приложении. Если запись удалена, ее идентификатор остается навсегда, так что ни одна будущая запись не будет принята за нее.

Однако есть способ сделать то, что вы хотите. Я полагаю, что вы хотите вместо целого столбца position. Добавьте это к вашей модели / таблице, а затем установите плагин acts_as_list .

Установите его обычным способом:

script/plugin install git://github.com/rails/acts_as_list.git

Затем добавьте «крючок» к вашей модели:

class Post < ActiveRecord::Base
  acts_as_list
end

Теперь столбец position вашей модели поста будет автоматически отслеживать себя без пробелов в последовательности. Это даже даст вам несколько удобных методов для повторного заказа, если вы того пожелаете.

0 голосов
/ 30 января 2010

И наоборот, вы можете позволить SQL сделать это самостоятельно:

SELECT rownum AS id, [whatever other columns you want]
FROM posts_table
WHERE [conditions]
ORDER BY [ordering conditions]

Это добавит числа к каждой строке, не пропуская ничего, как вы сказали.

ПРИМЕЧАНИЕ: я использую Oracle. Я не знаю, будет ли этот точный код работать в других вариантах.

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