Ruby trouver ID de tableau d'utilisateurs

Bonjour,

J’ai besoin de cette commande :

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

Et cela fonctionne très bien pour un ID/utilisateur, le problème est que j’ai environ 1500 utilisateurs (j’ai une liste/un tableau de leurs ID) et je ne sais pas comment les lister tous.

Ce que je veux accomplir… j’ai besoin de mettre à jour en masse le mot de passe (pour les tests uniquement, même mot de passe) pour tous les utilisateurs. Je l’ai déjà fait pour un et cela fonctionne, maintenant j’ai besoin d’une méthode rapide.

1 « J'aime »

Cela pourrait fonctionner.

User.all.update_all(password: 'pas une bonne idée')

Vous pouvez usurper l’identité d’utilisateurs. Donc, peut-être que vous n’avez pas besoin de faire ça ?

Ou vous pouvez rechercher sur Google « ruby loop array » pour un exemple de fonctionnement des boucles.

Et vous pouvez faire User.find(id) et économiser quelques frappes.

1 « J'aime »

Salut Jay… le truc, c’est que je n’ai pas besoin de mettre à jour tous les utilisateurs… juste certains d’entre eux avec un ensemble aléatoire d’ID.

J’ai essayé avec u = User.find_by_id([150,152,167,258,665])

Mais cela renvoie toujours pour l’ID 150 et change le mot de passe pour cet utilisateur uniquement. J’ai aussi essayé avec User.find(id: 150,152....) ça n’a pas aidé…

Remarque : J’essaie de migrer le forum vers une autre plateforme de discussion, et il y a un certain nombre d’utilisateurs qui ont écrit un tas de messages mais ne viennent plus sur le forum (et pour une raison quelconque, les colonnes password_hash et salt sont vides pour ces utilisateurs, le script d’importation d’utilisateurs ne permet pas d’importer des utilisateurs qui n’ont pas ces valeurs définies dans la base de données PGSQL.), donc je ne peux pas les laisser réinitialiser leurs mots de passe. Ce que je peux faire, c’est définir un mot de passe compliqué, et ils pourront certainement aller à l’option Mot de passe oublié et en réinitialiser un nouveau plus tard.

User.where pourrait être ce que vous cherchez, puis la syntaxe postgres pour trouver des éléments qui correspondent à un tableau. Je ne m’en souviens jamais tout à fait.

User.where('id IN (1,2,3,4,5)').find_each do |u|
  u.password = 'something'
end
5 « J'aime »

Est-il également possible d’utiliser une plage d’ID d’utilisateurs, par exemple de 100 à 300 ?
Merci

Oui, c’est du SQL conforme aux normes.

3 « J'aime »