2016-03-22 11 views
0

Ich habe ein Modell, das paginiert ist, und in einigen Fällen möchte ich eine zusätzliche Spalte zur Abfrage hinzufügen und dieselbe Spalte in meinen paginierten Ergebnissen abrufen. Zum Beispiel:Zugriff auf benutzerdefiniertes Auswahlfeld in Kaminari

users = User.select('users.*, users.value is NULL as val').page(2) 

Wenn ich users.first['val'] tun dann gibt es mir nichts. Aber wenn ich die Paginierung users = User.select('users.*, users.value is NULL as val') entferne, dann users.first['val'] wird mir geben, was ich will. Wie kann ich das mit Kaminari machen?

+0

Bitte posten Sie Ihre vollständige Abfrage (und idealerweise die relevanten Teile von Modellen mit Assoziationsdefinitionen) als ** Ihre Beispielabfrage scheint OK ** mit Kaminari zu funktionieren und somit gibt es zur Zeit kein Problem zu lösen. – BoraMa

Antwort

0

Ich sehe ein paar Probleme mit Ihrem Code und meine Tests zeigen, dass was Sie wollen, sollte mit Kaminari OK.

Zuerst schreiben Sie, dass Sie Spalten auf die Abfrage „extra hinzufügen“ wollen, dann sollten Sie wählen auch die User Objekt selbst, nicht nur die zusätzliche Spalte:

users = User.select('users.*, users.value is NULL as val') 

Als nächstes werden Sie wahrscheinlich vergessen, wählen Sie einen Benutzer aus der zurück (paginierte) Array vor dem Zugriff auf das Attribut so statt:

users['val'] 

sollten Sie wahrscheinlich so etwas wie:

users.first['val'] 

Und schließlich meinen Test für Kaminari und eine benutzerdefinierte Spalte in ausgewählter sehen (meine Spalte für null getestet ist name statt value aber das Prinzip ist das gleiche):

>> User.page(1).map(&:name) 
=> ["ddddd", nil, nil, nil, "0", nil] 

>> User.select('users.name is NULL as val').page(1).map{ |user| user['val'] } 
=> [0, 1, 1, 1, 0, 1] 

So scheint es Arbeit!

+0

ah ja Entschuldigung für die schlechte Codierung, ging ich ein bisschen zu schnell, um den Code zu schreiben, aktualisierte ich die Frage. Eigentlich ist die Abfrage viel komplizierter als das, mit ein paar 'Joins' und' Includes', könnte es das Problem sein? Übrigens sollte Ihre zweite Abfrage 'User.select ('users. *, users.name ist NULL as val') lauten. page (1) .map {| user | user ['val']} 'zu dem ersten Problem – Guillaume

+0

so denke ich habe ich herausgefunden, was die Probleme kommt, und es ist, weil ich auch ein' includes' in der Abfrage, und es scheint, ein bekannt zu sein Problem zwischen'Auswählen' und 'Includes' mit' ActiveRecord': http://StackOverflow.com/a/4048882/517193 – Guillaume

+0

OK und müssen Sie noch irgendwie dabei helfen? Wenn ja, fügen Sie bitte die vollständige Anfrage zu Ihrer Frage hinzu. – BoraMa

Verwandte Themen