2016-08-11 2 views
0

Ich habe einen Benutzer, der zu einem User_type gehört. Im Modell user_type gibt es ein Feld namens position, das die Standardsortierung bei der Anzeige von user_types und ihrer Benutzer behandelt.Rails group_by und Sortierung nach Feld in verwandtem Modell

Leider funktioniert dies nicht bei der Suche mit Ransack, also muss ich vom Benutzermodell suchen und group_by verwenden, um die Datensätze basierend auf ihrer user_type_id zu gruppieren.

Dies funktioniert perfekt, aber ich muss die Sortiermethode respektieren, die im user_type-Modell definiert ist. Dies ist ebenfalls dynamisch, daher gibt es keine Möglichkeit zu sagen, welche Sortierung das Benutzermodell hat.

Daher glaube ich, ich muss das group_by Array durchlaufen und die Sortierung manuell durchführen. Aber ich habe keine Ahnung, wo ich anfangen soll. Dies ist die Controller-Methode:

Wie manipuliere ich dieses Array zu einem Feld, dass in dem verwandten Modell zu sortieren?

Antwort

0

Versuchen Sie, diese Linie zu Usertype Modell hinzufügen

default_scope order('position')

+0

default_scope keine gute Idee ist, in jedem Fall zu verwenden. Es kann zu unerwartetem Verhalten führen. Es ist besser, einen Bereich zu erstellen oder eine reine 'order'-Methode zu verwenden. –

+0

Dies funktioniert nicht, da vom UserType keine Abfrage durchgeführt wird. –

0

Zunächst gibt n + 1 Abfrage Problem. Sie schließen sich nicht user_types Tabelle users und Anwendungsaufrufe SELECT auf user_types n-mal, wobei n eine Anzahl von Benutzern + eine andere SELECT Anruf Benutzer greifen:

... 
    UserType Load (0.2ms) SELECT "user_types".* FROM "user_types" WHERE "user_types"."id" = $1 LIMIT 1 [["id", 29]] 
    UserType Load (0.2ms) SELECT "user_types".* FROM "user_types" WHERE "user_types"."id" = $1 LIMIT 1 [["id", 7]] 
    ... 

So Sie user_types und Bestellung von user_types.position enthalten müssen:

@q.result(distinct: true).includes(:user_type).order('user_types.position') 

Es gibt viele Beispiele für die Bestellung hier:

http://apidock.com/rails/ActiveRecord/QueryMethods/order

Ihr Fall (Bestellung auf Verbände) ist auch

Informationen über verfügbare n + 1 Abfrage:

What is SELECT N+1?

+0

Ok, es funktioniert, danke! Ich dachte nicht, dass dies den user_type respektieren würde. Gibt es auch eine Möglichkeit, die Benutzer in diesen Gruppen zu sortieren? –

+0

@ bo-oz Geben Sie ein Beispiel und ein Problem bezüglich der Zuordnung zwischen Gruppen und Benutzern an, indem Sie Ihre Frage bearbeiten. Ich werde meine Antwort mit Lösung erweitern. –

Verwandte Themen