2014-02-03 2 views
0

Возможно ли с помощью Rails удалить что-либо за определенный предел. Например, если в записи «Модель» было 200 сообщений, и я хотел сохранить только самые последние 100 и удалить старые, что является наиболее эффективным способом сделать это? Это будет так? Есть ли более быстрый путь?Удалить все экземпляры Прошлое разрешенное число - рельсы

Post.order(date: :desc).last(100).delete_all 

Но это не работает для меня.

ответ

0

Я не знаю, могли бы вы сделать это в одном запросе, но я бы нашел дату последнего сообщения, которое вы хотите сохранить, а затем удалите все старые сообщения.

например.

date_of_oldest_post = Post.order('date desc').offset(100).first.date 
Post.where('date < ?', date_of_oldest_post).delete_all 
0

Это решение некрасиво, как ад, но это работает:

Post.where.not(id: Post.order(date: :desc).last(100).select(:id)).delete_all

0
Post.order(:created_at).first(Post.count-100).each.destroy if Post.count > 100 
  1. Сортировать по created_at время, по возрастанию
  2. Создать массив старые записи превышая 100 сообщений
  3. Идите по каждому сообщению и уничтожьте его
Смежные вопросы