O limit(10) já deve fazer isso ![]()
Algo assim deve funcionar: (mas não foi testado)
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)
O problema é que pedir ao PostgreSQL para converter a string de data em um timestamp será muito ineficiente. Ele terá que fazer a conversão para cada tópico individualmente antes de selecionar os primeiros 10.
Existem algumas opções que consigo pensar: você pode armazenar as datas como “segundos desde a época”, em vez de ISO8601. Isso tornará a ordenação pelo PostgreSQL muito mais fácil. Ou talvez seja possível usar uma migração de banco de dados para adicionar um índice à tabela topic_custom_fields para TIMESTAMP value.