Ruby에서 사용자 ID 배열 찾기

안녕하세요,

다음 명령이 필요합니다:

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

이것은 하나의 ID/사용자에 대해서는 정상적으로 작동합니다. 문제는 약 1,500명의 사용자(그들의 ID 목록/배열을 가지고 있음)가 있고, 어떻게 모두 나열해야 할지 모른다는 것입니다.

원하는 것은… 모든 사용자의 일괄 비밀번호 업데이트(테스트 용도로 동일한 비밀번호 사용)입니다. 이미 한 명에 대해서는 수행했고 작동하므로, 이제 빠른 방법을 필요로 합니다.

이렇게 하면 될 것 같습니다.

User.all.update_all(password: 'not a good idea')

사용자를 사칭할 수 있습니다. 그래서 굳이 이렇게 할 필요가 없을 수도 있겠네요.

또는 루프가 어떻게 동작하는지 예제를 보려면 "ruby loop array"로 검색해 보세요.

그리고 User.find(id)를 사용하면 몇 번의 키 입력을 줄일 수 있습니다.

제이, 안녕하세요… 사실 모든 사용자를 업데이트할 필요는 없어요. 무작위로 ID가 정해진 일부 사용자만 업데이트하면 됩니다.

u = User.find_by_id([150,152,167,258,665])로 시도해 봤는데, 항상 ID 150만 반환되고 해당 사용자만 비밀번호가 변경됩니다. User.find(id: 150,152....)도 시도해 봤지만 도움이 되지 않았어요…

참고로 포럼을 다른 토론 플랫폼으로 이전하는 중인데, 많은 메시지를 작성했지만 더 이상 포럼에 접속하지 않는 사용자가 있습니다. (어떤 이유인지 모르겠지만, PGSQL 데이터베이스에서 해당 사용자의 password_hash와 salt 컬럼 값이 비어 있으며, 사용자 가져오기 스크립트는 이러한 값이 정의되지 않은 사용자를 가져오지 못하게 되어 있습니다.) 그래서 비밀번호 재설정을 허용할 수 없어요. 제가 할 수 있는 일은 복잡한 비밀번호를 설정해 두는 것이며, 이후 해당 사용자가 ‘비밀번호 찾기’ 옵션을 통해 새 비밀번호로 재설정할 수 있을 것입니다.

User.where가 원하는 것일 수도 있고, 그런 다음 배열과 일치하는 항목을 찾는 postgres 구문을 사용하면 됩니다. 저는 그걸 정확히 기억하지 못하네요.

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

100에서 300까지와 같은 사용자 ID 범위를 사용하는 것도 가능한가요?
감사합니다

네, 표준에 부합하는 SQL입니다.