Мне нужно вернуть ровно десять записей для использования в представлении. У меня очень строгий запрос, который я хотел бы использовать, но я хочу использовать менее строгий запрос для заполнения результатов в случае, если первый запрос не даст десять результатов.
Просто поиграть несколько минут, и это то, что я придумал, но это не работает. Я думаю, что это не работает, потому что слияние предназначено для объединения запросов в разных моделях, но я могу ошибаться.
class Article < ActiveRecord::Base
...
def self.listed_articles
Article.published.order('created_at DESC').limit(25).where('listed = ?', true)
end
def self.rescue_articles
Article.published.order('created_at DESC').where('listed != ?', true).limit(10)
end
def self.current
Article.rescue_articles.merge(Article.listed_articles).limit(10)
end
...
end
При просмотре в консоли это накладывает ограничения в перечисленных списках на запрос в rescue_articles, показывая что-то вроде:
Article Load (0.2ms) SELECT `articles`.* FROM `articles` WHERE (published = 1) AND (listed = 1) AND (listed != 1) ORDER BY created_at DESC LIMIT 4
Article Load (0.2ms) SELECT `articles`.* FROM `articles` WHERE (published = 1) AND (listed = 1) AND (listed != 1) ORDER BY created_at DESC LIMIT 6 OFFSET 4
Я уверен, что есть какой-то смехотворно простой метод, который мне не хватает в документации, но я еще не нашел его.
EDIT:
То, что я хочу сделать, это вернуть все статьи, где перечислены, верно из двадцати пяти самых последних статей. Если это не даст мне десять статей, я хотел бы добавить достаточное количество статей из самых последних статей, где перечисленные не соответствуют действительности, чтобы получить мои полные десять статей.
РЕДАКТИРОВАТЬ # 2:
Другими словами, метод слияния, кажется, объединяет запросы в один длинный запрос вместо слияния результатов. Мне нужны первые десять результатов двух запросов (с указанием приоритетов в перечисленных статьях), а не один длинный запрос.