Comment récupérer les sujets triés par la valeur du champ personnalisé iso8601 ?

Le limit(10) devrait déjà faire cela :slight_smile:

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.