El limit(10) ya debería hacer eso ![]()
Esto es lo que debería funcionar (aunque no lo he probado):
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)
El problema es que pedirle a PostgreSQL que convierta la cadena de fecha en una marca de tiempo será muy ineficiente. Tendrá que realizar la conversión para cada tema individualmente antes de seleccionar los primeros 10.
Se me ocurren algunas opciones: podrías almacenar las fechas como “segundos desde la época” en lugar de en formato ISO8601. Eso hará que sea mucho más fácil para PostgreSQL ordenarlas. O también podrías utilizar una migración de base de datos para añadir un índice a la tabla topic_custom_fields para TIMESTAMP value.