Ruby encontrar array de IDs de usuários

Olá,

Preciso deste comando:

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

E isso está funcionando muito bem para um ID/usuário, o problema é que tenho cerca de 1500 usuários (tenho uma lista/array dos seus IDs) e não sei como listá-los todos.

O que quero realizar… preciso atualizar a senha em massa (mesma senha apenas para teste) para todos os usuários. Já fiz para um e funciona, agora preciso de um método rápido.

1 curtida

Isso pode funcionar.

User.all.update_all(password: 'não é uma boa ideia')

Você pode se passar por usuários. Então talvez você não precise fazer isso?

Ou você pode pesquisar no Google por "ruby loop array" para um exemplo de como os loops funcionam.

E você pode fazer User.find(id) e economizar algumas teclas.

1 curtida

E aí, Jay… o lance é que eu não preciso atualizar todos os usuários… apenas alguns com um conjunto aleatório de IDs.

Eu tentei com u = User.find_by_id([150,152,167,258,665])

Mas isso sempre retorna para o ID 150 e muda a senha apenas para esse Usuário. Também tentei com User.find(id: 150,152....) não ajudou…

Observação: Estou tentando migrar o fórum para outra plataforma de discussão, e há um número de usuários que escreveram um monte de mensagens, mas não estão mais vindo ao fórum (e por algum motivo as colunas password_hash e salt estão vazias para esses usuários, o script de importação de usuários não permite importar usuários que não tenham esses valores definidos no banco de dados PGSQL), então não posso deixá-los redefinir suas senhas. O que posso fazer é definir uma senha complicada, e eles certamente poderão ir para a opção Esqueceu a senha e redefinir uma nova depois.

User.where pode ser o que você procura e, em seguida, a sintaxe do postgres para encontrar itens que correspondem a um array. Eu nunca consigo lembrar direito.

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

Também é possível usar um intervalo de IDs de usuário, por exemplo, de 100 a 300?
Obrigado

Sim, é SQL em conformidade com os padrões.

3 curtidas