Поведение Will_paginate для удаленных сообщений - отображение правильного количества страниц - PullRequest
0 голосов
/ 17 ноября 2011

Справочная информация:

Я создал новое приложение rails 3 с моделью User, а модель имеет прикрепленные скрепки (модель Picture).Я разместил первые 15 записей изображений (приложений), которые я отправил в качестве теста для проверки функциональности.Я делаю следующее в контроллере для отображения всех изображений, кроме первых 15 тестовых изображений:

@pictures=Picture.order ('pictures.id DESC'). Limit (Picture.last.id-15) .paginate (: page => params [: page],: per_page => 15)

Хотя я не отображаю первые 15 записей, will_paginate по-прежнему показывает количество страниц, предполагающих первые 15записи все еще отображались в индексном представлении (поскольку will_paginate берет это из модели Picture)

Что я хочу сделать: Показать правильное количество страниц, используя will_paginate.Удалить записи тестовых изображений (первые 15 записей)

Вопросы: Я мог бы использовать Picture.destroy (: id), чтобы удалить первые 15 записей изображений.

  1. После удаления записей таким образом будет ли will_paginate по-прежнему показывать страницы, если эти записи все еще существуют?

  2. Будет ли will_paginate выдавать ошибку о том, что изображениес: id => 1 не существует?

  3. Как удалить записи изображений и начать заново с: id => 1?(хотя это может и не быть необходимым, если

Спасибо

1 Ответ

1 голос
/ 17 ноября 2011

Как правило, когда вы тестируете функциональность, вы должны использовать другую базу данных для своей производственной среды, чтобы вам не приходилось возиться с попытками смещения идентификаторов или удаления по факту.

Для ответаВаши вопросы, хотя ...

  1. Нет, поскольку они будут уничтожены в базе данных, если только вы не используете что-то вроде is_paranoid, они больше не будут существовать.
  2. will_paginate не будет заботиться, если идентификаторы в последовательности или нет, он заботится только об общем количестве строк
  3. Picture.each(&:destroy) удалит все фотографии, чтобы сбросить auto_increment (база данных peiceфункциональность) вам нужно запустить что-то вроде этого ...

ALTER SEQUENCE your_sequence_name RESTART WITH 1;

...