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

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

Я сделал новое приложение 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 записей Picture.

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

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

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

Спасибо


person Shantanu Bhalerao    schedule 17.11.2011    source источник


Ответы (1)


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

Но чтобы ответить на ваши вопросы ...

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

ALTER SEQUENCE your_sequence_name RESTART WITH 1;

person lloydpick    schedule 17.11.2011
comment
Я должен был использовать другую базу данных, но я начал тестирование на heroku и по умолчанию он настроен на производство (я не знаю, позволяет ли heroku тестовая среда) 1. & 2. Да will_paginate не заботился, когда я удаляю тестовые записи Picture. 3. Мне не удалось заставить Picture.each (&: destroy) работать. - person Shantanu Bhalerao; 18.11.2011
comment
Picture.destroy_all - еще один способ удаления всех записей. - person sscirrus; 08.03.2013