У меня есть приложение Rails с Comment
модели, и Notification
модель, где каждый комментарий has_many :notifications
Рельсы: has_many в сроки
Я хочу создать dependent: :destroy
на этой has_many
отношения. Проблема в том, что таблица уведомлений ОГРОМНАЯ (где-то порядка 20 миллионов записей). Поэтому в любое время, когда я пытаюсь уничтожить комментарий, он тратит несколько минут на просмотр таблицы уведомлений.
Обычно, когда я запрашиваю таблицу уведомлений, я просто указываю диапазон для created_at
, и это, кажется, работает очень хорошо.
Все извещения созданы в течение 24 часов комментария ДЕТСКОГО created_at
- Так что я решил, чтобы ускорить отношения, я мог бы просто добавить что-то вроде
has_many :notifications, -> { where(created_at: created_at..(created_at + 1.day)) }, dependent: :destroy
Но, конечно, не работает, потому что created_at
вызывается на экземпляр Notification::ActiveRecord_Relation
, а не на исходный комментарий.
Можно ли ссылаться на атрибут комментария в запросе has_many
этого комментария?
Не отвечая на ваш вопрос, но вам нужно «: уничтожить» уведомления или вы могли бы:: удалить их? это должно быть намного быстрее. В качестве альтернативы вы можете удалить зависимость и отключить фоновое задание для их очистки. –