рельсы следующая/предыдущая запись

63
9

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

В моем db есть несколько сообщений (6, 5, 4, 3, 2, 1), и у них есть default_scope для прикрепленных сообщений: default_scope :order => 'sticky DESC' и если бы было отправлено 4 сообщения, это было бы сначала место (4, 6, 5, 3, 2, 1...)

Если я буду искать следующую запись следующим образом: record.where('created_at >?', @post.created_at).first, это будет 3, а не nil, потому что в первую очередь он ищет по created_at а затем упорядочивает sticky колонкой,

Как я могу найти первые/следующие сообщения с этим default_scope?

спросил(а) 2021-01-19T15:52:25+03:00 2 месяца, 3 недели назад
1
Решение
62

Вы все еще хотите учитывать масштаб по умолчанию при поиске "следующей" записи?

Если нет, используйте

Post.unscoped.where(...).first

Если да, вы могли бы рассмотреть возможность изменения своей области по умолчанию следующим образом:

default_scope :order => ['sticky DESC', 'created_at ASC']

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

ответил(а) 2021-01-19T15:52:25+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема