2017-10-13 2 views
0

J'ai ce tableau retourné par une requête activerecord:tableau Ruby tri

SELECT id, value FROM table ORDER BY value DESC 
[1054, 86], [1062, 86], [1059, 84] 

Et j'ai créé un tableau simple à comparer avec le premier tableau:

array.sort_by! {| object | object.access_count}} .reverse

Mais quand je compare les deux tableaux le résultat est différent:

activerecord => [1054, 86], [1062, 86], [1059, 84] 
array.sort_by! => [[1062, 86], [1054, 86], [1059, 84] 

Ainsi, dans certains cas, l'affichage de comparaison ne fonctionne pas parce que activerecord trie une façon et sort_by! trie un autre.

Comment puis-je résoudre cela? Merci.

+0

Qu'est-ce que vous essayez d'atteindre en comparant les deux? Pouvez-vous expliquer un peu plus? @ gui12344455 –

+0

Oui, j'utilise rspec pour tester mon code et un test consiste à vérifier si les données retournées sont correctement triées. – gui12344455

+0

Donc vous essayez de tester la méthode 'order' de l'enregistrement actif. En fait, chez RSpec, nous sommes responsables de tester le code écrit par nous. Vous n'avez pas besoin de tester la commande ici. Dans le cas où vous êtes nécessaire d'écrire un cas de test pour l'ordre, Dans la spécification, vous pouvez faire une requête comme 'records = Model.only (: id,: nom) .order (: desc)' et vérifier comme ceci 'expected (response_records) .to eq (enregistrements) ' –

Répondre

1

Pouvez-vous essayer l'ordre Activerecord avec second arg.

.order(value: :desc, id: :desc)