Как получить темы, отсортированные по значению пользовательского поля iso8601?

limit(10) уже должно это обеспечить :slight_smile:

Вот что-то вроде этого должно помочь (но не тестировалось):

Topic.where("category_id in (?)", [cat_id])
         .where("closed = ?", false)
         .joins("LEFT JOIN topic_custom_fields import_tcf ON import_tcf.topic_id = topic.id AND topic_custom_fields.name = 'importedSortDate'")
         .order("TIMESTAMP import_tcf.value")
         .order("created_at desc")
         .limit(10)

Проблема в том, что заставлять PostgreSQL преобразовывать строку даты в метку времени будет очень неэффективно. Ему придется выполнять конвертацию для каждой отдельной темы, а затем выбирать первые 10.

Я могу предложить несколько вариантов — можно хранить даты как «секунды с начала эпохи», а не в формате ISO8601. Это сделает их гораздо проще для сортировки в PostgreSQL. Либо вы можете использовать миграцию базы данных, чтобы добавить индекс в таблицу topic_custom_fields для TIMESTAMP value.