2016-06-09 2 views
0

Ich habe ein Benutzermodell, das ein Array enthält. Dieses Array wird verwendet, um Punkte zu speichern, die der Benutzer in verschiedenen Aktivitäten erzielt hat. Es sieht im Wesentlichen wie folgt:Sortieren von Benutzern in Rails basierend auf Werten im Array-Attribut des Benutzermodells

<ActiveRecord::Relation [#<User id: 1, fullname: "Kaja Sunniva Edvardsen", points: [0, 4170, 3860, 2504, 2971, 3859, 4346]>, #<User id: 2, fullname: "Alexander Lie Sr.", points: [0, 3273, 3681, 2297, 2748, 4202, 3477]>]> 

ich alle Benutzer durch die verschiedenen Werte in den Punkten Array sortieren möchten für jede der verschiedenen Aktivitäten Rangliste in der Lage zu schaffen, Punkte [0], Punkte [1] usw ...

durch Punkte Sortierung [1] sollte Kaja erste Rückkehr, 4170> 3273, der durch die Punkte sorting [6] sollte Alexander die erste Stelle setzen, 4202> 3859

Wie mache ich das?

+0

Was genau möchten Sie sortieren? Benutzer oder Punkte oder? Wie sortieren Sie - was ist "mit anderen Werten"? Können Sie ein erwartetes Ergebnis geben? –

+0

Ich möchte die Benutzer nach den Werten im Array sortieren. So etwas wie OrderBy (Punkte [1]) funktioniert nicht. Das Ergebnis, das ich hier möchte, wäre Kaja zuerst und Alexander zweitens aufgrund Kajas Punkt [1] Wert höher, 4170 vs 3273 – Oyvkva

+0

Was ist die Modelldefinition und Migration für Benutzer? Wie genau speichern Sie ein Array in db? –

Antwort

2

Soweit ich weiß, hat MySQL keinen integrierten Array-Typ.

Angenommen, Sie haben ein Modell wie folgt aus:

class User < ActiveRecord::Base 
    # ... 
    serialize :points, Array 
    # ... 
end 

Sie nicht mit order Abfragen sortieren können, aber Sie können eine andere Lösung (weniger effizient) versuchen, den Umgang mit den Ressourcen als Array:

User.all.sort { |user1, user2| user2.points[1] <=> user1.points[1] } 

Das wird ein Array anstelle einer ActiveRecord-Abfrage zurückgeben. Bedenken Sie auch, dass dieser Code keine nil Werte behandelt (z. B. Was, wenn ein Benutzer nur 2 Elemente in points hat?).

+0

Danke, ja, mein Modell sieht so aus. Ich sehe, ich bekomme ArgumentError: der Vergleich von User mit User ist fehlgeschlagen, wenn ich das jetzt ausprobiere, aber ich werde es noch einmal ausprobieren. Sieht so aus, als würde ich es in Rails sortieren, das ist gut zu wissen. – Oyvkva

+0

Können Sie uns Ihre aktuelle Abfrage zeigen, um es zu debuggen? :] – Wikiti

+0

Ich hatte gerade einen Nullwert verpasst. Es macht was ich will, danke für die Hilfe! – Oyvkva

Verwandte Themen