Ruby trova array di ID utente

Ciao,

Ho bisogno di questo comando:

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

E questo funziona benissimo per un ID/utente, il fatto è che ho circa 1500 utenti (ho un elenco/array dei loro ID) e non so come elencarli tutti.

Cosa voglio realizzare… devo aggiornare in blocco la password (solo per test, stessa password) per tutti gli utenti. L’ho già fatto per uno e funziona, ora ho bisogno di un metodo rapido.

1 Mi Piace

Potrebbe funzionare.

User.all.update_all(password: 'non è una buona idea')

Puoi impersonare gli utenti. Quindi forse non hai bisogno di farlo?

Oppure puoi cercare su Google “ruby loop array” per un esempio di come funzionano i cicli.

E puoi fare User.find(id) e risparmiare qualche battitura.

1 Mi Piace

Ehi Jay… il fatto è che non ho bisogno di aggiornare tutti gli utenti… solo alcuni con un set casuale di ID.

Ho provato con u = User.find_by_id([150,152,167,258,665])

Ma questo restituisce sempre per l’ID 150 e cambia la password solo per quell’utente. Ho anche provato con User.find(id: 150,152....) non ha aiutato…

Nota: sto cercando di migrare il forum su un’altra piattaforma di discussione, e ci sono un certo numero di utenti che hanno scritto un sacco di messaggi ma non vengono più al forum (e per qualche motivo le colonne password_hash e salt sono vuote per quegli utenti, lo script di importazione utenti non consente l’importazione di utenti che non hanno questi valori definiti nel database PGSQL.), quindi non posso farli reimpostare le password. Quello che posso fare è impostare una password complicata, e sicuramente potranno andare all’opzione Password dimenticata e reimpostarne una nuova in seguito.

User.where potrebbe essere quello che stai cercando e poi la sintassi postgres per trovare elementi che corrispondono a un array. Non riesco mai a ricordarla bene.

User.where('id IN (1,2,3,4,5)').find_each do |u|
  u.password = 'something'
end
5 Mi Piace

È anche possibile utilizzare un intervallo di ID utente, ad esempio da 100 a 300?
Grazie

Sì, è SQL conforme agli standard.

3 Mi Piace