Ruby finde Array von User IDs

Hallo,

Ich benötige diesen Befehl:

u = User.find_by_id('150)
u.password='some_password'
u.save!

Und das funktioniert für eine ID/einen Benutzer einwandfrei. Das Problem ist, dass ich ungefähr 1500 Benutzer habe (ich habe eine Liste/ein Array ihrer IDs) und nicht weiß, wie ich sie alle auflisten kann.

Was ich erreichen möchte… Ich muss das Passwort für alle Benutzer in großen Mengen aktualisieren (nur zum Testen dasselbe Passwort). Ich habe es bereits für einen Benutzer gemacht und es funktioniert. Jetzt brauche ich eine schnelle Methode.

1 „Gefällt mir“

Das könnte es tun.

User.all.update_all(password: 'keine gute Idee')

Sie können Benutzer impersonifizieren. Vielleicht müssen Sie das nicht tun?

Oder Sie können nach „ruby loop array“ googeln, um ein Beispiel dafür zu erhalten, wie Schleifen funktionieren.

Und Sie können User.find(id) verwenden und ein paar Tastenanschläge sparen.

1 „Gefällt mir“

Hallo Jay … die Sache ist, dass ich nicht alle Benutzer aktualisieren muss … nur einige von ihnen mit einer zufälligen ID-Liste.

Ich habe es mit u = User.find_by_id([150,152,167,258,665]) versucht.

Aber das gibt immer für die ID 150 zurück und ändert das Passwort nur für diesen Benutzer. Ich habe auch versucht, mit User.find(id: 150,152....) zu arbeiten, aber das hat nicht geholfen …

Hinweis: Ich versuche, das Forum auf eine andere Diskussionsplattform zu migrieren, und es gibt eine Reihe von Benutzern, die viele Nachrichten geschrieben haben, aber nicht mehr im Forum aktiv sind (und aus irgendeinem Grund sind die Spalten password_hash und salt für diese Benutzer leer, das Skript zum Importieren von Benutzern erlaubt nicht den Import von Benutzern, die diese Werte nicht in der PGSQL-Datenbank definiert haben.), daher kann ich sie ihr Passwort nicht zurücksetzen lassen. Was ich tun kann, ist, ein kompliziertes Passwort festzulegen, und sie können sicherlich die Option “Passwort vergessen” verwenden und später ein neues zurücksetzen.

User.where ist vielleicht das, was Sie wollen, und dann die Postgres-Syntax, um Dinge zu finden, die mit einem Array übereinstimmen. Ich kann mich nie ganz erinnern.

User.where('id IN (1,2,3,4,5)').find_each do |u|
  u.password = 'something'
end
5 „Gefällt mir“

Ist es auch möglich, einen Bereich von Benutzer-IDs zu verwenden, zum Beispiel von 100 bis 300?
Danke

Ja, es ist standardkonformes SQL.

3 „Gefällt mir“