Rails postgres заказывает пользовательские

Я ищу записи, используя запрос IN так:

Event.where("events.id IN (#{events.nil? ? '' : events.collect(&:id).join(',')})")

Который производит выходные данные:

SELECT "events".* FROM "events" WHERE (events.id IN (143,169,139,48,172,146,145,124,111,49,108,18,113,144)) AND (status = 'live') LIMIT 10

Тем не менее, это по умолчанию сортируется по update_at. Я бы хотел, чтобы он сортировал по части запроса IN. Я имею в виду, что мне бы хотелось, чтобы это был порядок, который он возвращает:

143,169,139,48,172,146,145,124,111,49,108,18,113,144

Возможно ли это вообще?

Я также должен отметить, что я не могу добавить столбец приоритета или аналогичный таблице, поскольку часть «событий» будет динамически генерироваться.

Я только что открыл очень похожий вопрос:

Postgres ORDER BY значения в списке IN с использованием Rails Active Запись

Не стесняйтесь отмечать этот мой как дубликат

1
добавлено отредактировано
Просмотры: 2
nl ja de
Ahh ... Я не видел этого комментария. Затем отметьте как дубликат ...
добавлено автор bonCodigo, источник
Используйте .order ("events.id asc") в конце.
добавлено автор MurifoX, источник
Этот вопрос уже рассмотрен здесь: stackoverflow.com/questions/866465/…
добавлено автор Jef, источник
Это не совсем так, как это связано с Rails, и я бы хотел достичь этого с помощью ActiveRecord, если это возможно
добавлено автор jay, источник

2 ответы

Это Rails, поэтому используйте методы Rails для запросов к базе данных. Я верю:

Event.where(:id => events.map(&:id)).order(:id)

это то, что вы ищете.

If events is already a collection of database records, then just .where(:id => events) will also work.

2
добавлено
Что вы имеете в виду? Это есть , используя AR.
добавлено автор Chowlett, источник
Спасибо, я уже подумал о чем-то подобном, но я бы предпочел сделать это с AR, если это возможно.
добавлено автор jay, источник
Вы правы, извините. Я закончил использование stackoverflow.com/questions/12012574/…
добавлено автор jay, источник

Вы пробовали заказ?

SELECT "events".* FROM "events" 
WHERE (events.id IN (143,169,139,48,172,146,145,124,111,49,108,18,113,144)) 
AND (status = 'live') 
ORDER BY events.id asc
LIMIT 10
0
добавлено
Не совсем то, что мне нужно, но спасибо за ответ
добавлено автор jay, источник