Le limit(10) devrait déjà faire cela ![]()
Ce genre de solution devrait fonctionner (mais non testé) :
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)
Le problème est que demander à PostgreSQL de convertir une chaîne de date en horodatage sera très inefficace. Il devra effectuer la conversion pour chaque sujet individuellement, avant de sélectionner les 10 premiers.
Il y a quelques options qui me viennent à l’esprit : vous pourriez stocker les dates en « secondes depuis l’époque » plutôt qu’en format ISO8601. Cela les rendra beaucoup plus faciles à trier pour PostgreSQL. Ou vous pourriez être en mesure d’utiliser une migration de base de données pour ajouter un index à la table topic_custom_fields pour TIMESTAMP value.