Wie kann ich Datensätze in meiner Datenbank unter nicht gleichen Bedingungen finden? Ich habe das jetzt, aber gibt es eine ausgefallene Art, es zu tun?
GroupUser.where('user_id != ?',me)
Wie kann ich Datensätze in meiner Datenbank unter nicht gleichen Bedingungen finden? Ich habe das jetzt, aber gibt es eine ausgefallene Art, es zu tun?
GroupUser.where('user_id != ?',me)
Antworten:
In Rails 4.x (Siehe http://edgeguides.rubyonrails.org/active_record_querying.html#not-conditions )
In Rails 3.x.
Um die Länge zu verkürzen, können Sie
GroupUser.arel_table
in einer Variablen speichern oder bei Verwendung innerhalb des ModellsGroupUser
selbst, z. B. in ascope
,arel_table[:user_id]
anstelle von verwendenGroupUser.arel_table[:user_id]
Rails 4.0-Syntax wird der Antwort von @ jbearden gutgeschrieben
quelle
GroupUser.where(other_condition: true).where.not(user_id: user_id)
Schienen 4
quelle
Die einzige Möglichkeit, es schicker zu machen, ist mit MetaWhere .
MetaWhere hat einen neueren Cousin namens Squeel, der Code wie diesen zulässt:
Es versteht sich von selbst, dass es sich nicht lohnt, einen Edelstein zu verwenden, wenn dies der einzige Refaktor ist, den Sie herstellen werden, und ich würde einfach bei dem bleiben, was Sie haben. Squeel ist nützlich in Situationen, in denen viele komplexe Abfragen mit Ruby-Code interagieren.
quelle
Schienen 4:
Wenn Sie sowohl ungleich als auch gleich verwenden möchten , können Sie Folgendes verwenden:
(. Das heißt , wenn Sie eine Vielzahl von Operatoren verwenden möchten
>
,<
), an einem gewissen Punkt können Sie Notationen der folgenden wechseln:quelle
GroupUser.where(group_id: group_id).where.not(user_id: user_id)
?Sie sollten den Tabellennamen immer in die SQL-Abfrage aufnehmen, wenn Sie sich mit Zuordnungen befassen.
Wenn eine andere Tabelle die
user_id
Spalte enthält und Sie beide Tabellen verbinden, haben Sie in der SQL-Abfrage einen mehrdeutigen Spaltennamen (dh Probleme).Also, in Ihrem Beispiel:
Oder etwas ausführlicher:
Beachten Sie, dass Sie sich darüber keine Gedanken machen müssen, wenn Sie einen Hash verwenden, da Rails dies für Sie erledigt:
In Rails 4 wurde, wie von @ dr4k3 angegeben, die Abfragemethode
not
hinzugefügt:quelle
In Rails 3 kenne ich nichts ausgefalleneres. Ich bin mir jedoch nicht sicher, ob Ihre ungleiche Bedingung nicht mit (user_id) NULL-Werten übereinstimmt. Wenn Sie das wollen, müssen Sie so etwas tun:
quelle