2013-12-22 10 views
6

Ich habe ein Benutzermodell mit optionaler Twitter-Integration.Rails4/Rails5 Modell finden wo nicht

Ich habe ein Attribut 'Benutzername' hinzugefügt, das nur gefüllt wird, wenn ein Benutzer die Twitter-Authentifizierung abgeschlossen hat.

Ich möchte alle Benutzer mit der Integration finden. Was ist der beste Weg, um alle Objekte zu finden, wo ein Attribut ist oder wo es nicht ist?

Antwort

19

die einfachste Art und Weise habe ich gefunden:

User.where.not(username: nil)

andere Antworten, die ich würde gerne auch schreiben Sie Sie

+0

Es tut mir leid, aber Sie sind nicht richtig, zumindest als Sie Ihre Frage "wo es nicht leer ist" formuliert. Sie müssen 'User.where.not (Benutzername: '')' Warum? Ihre Abfrage ignoriert nur Nicht-Null- (oder NULL-) Werte, * nicht * leere (aka leere) Werte. Dezenter Unterschied, aber ein wichtiger. Wenn Sie beispielsweise eine Textspalte haben und der Benutzer den gesamten Text löscht und speichert. Es ist nicht mehr "Null" (NULL), es ist leer (wie in einer leeren Zeichenfolge). Ihre obige Abfrage enthält diesen Datensatz weiterhin. – Karl

+0

Danke @Karl Ich habe den Text in der Frage aktualisiert. Feld wird nicht von Benutzern aktualisiert, nur durch oauth Integration und Validierung erlaubt nicht leer. –

0

sehen nur die SQL in der Aussage, wo:

User.where("username <> nil") 
+0

Blair Andersons Antwort ist definitiv der bessere Weg, dies zu tun. Wenn Sie einen Datenspeicher haben, der den Operator <<> nicht versteht, erhalten Sie einen Fehler. 'where.not' ist Datenspeicher-agnostisch und übersetzt zu dem, was * es * versteht. –