Я столкнулся с неожиданным поведением моего приложения Rails(PostgreSQL) при получении связанных записей. Два похожих запроса возвращают результаты в разном порядке, и я не могу понять, почему.
У меня есть четыре модели: User, Subscription и PremiumUser PremiumSubscription.
class User < ApplicationRecord
has_many :subscriptions
end
class Subscription < ApplicationRecord
belongs_to :user
end
class PremiumUser < ApplicationRecord
has_many :subscriptions
end
class PremiumSubscription < ApplicationRecord
belongs_to :user
end
Я выполняю следующие запросы:
# Query 1
User.find(12345).subscriptions.pluck(:created_at)
# Query 2
PremiumUser.find(67890).premium_subscriptions.pluck(:created_at)
Полученные результаты:
Дополнительный контекст:
Мои вопросы:
Любая помощь или предложения о том, как подойти к этой проблеме, будут очень признательны. Спасибо!
Запускайте SQL-запросы, проверяйте модели, смотрите индексы таблиц.





Без порядка это как жизнь:
«...Моя мама всегда говорила, что жизнь похожа на коробку шоколадных конфет. Никогда не знаешь, что получишь...» Форрест Гамп
Из документации (ЗАКАЗАТЬ)
«После того, как запрос создал выходную таблицу (после обработки списка выбора), ее можно дополнительно отсортировать. Если сортировка не выбрана, строки будут возвращены в неопределенном порядке. Фактический порядок в этом случае будет зависеть от типы планов сканирования и объединения, а также порядок на диске, но на него нельзя полагаться. Определенный порядок вывода может быть гарантирован только в том случае, если шаг сортировки выбран явно».
Предложение ORDER BY определяет порядок сортировки:
SELECT select_list
FROM table_expression
ORDER BY sort_expression1 [ASC | DESC] [NULLS { FIRST | LAST }]
[, sort_expression2 [ASC | DESC] [NULLS { FIRST | LAST }] ...]
Выражение(я) сортировки может быть любым выражением, которое будет допустимым в списке выбора запроса.