RubyでユーザーIDの配列を見つける

こんにちは。

このコマンドが必要です。

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

これは1つのID/ユーザーで正常に動作しますが、ユーザーが約1500人います(IDのリスト/配列があります)が、すべてをリストする方法がわかりません。

達成したいこと…パスワードを一括更新する必要があります(テスト目的で同じパスワードのみ)。すでに1つ更新しましたが、今回は迅速な方法が必要です。

「いいね!」 1

これでうまくいくかもしれません。

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

ユーザーになりすますことができます。ですから、これを行う必要はないかもしれません。

または、「ruby loop array」をGoogleで検索して、ループの仕組みの例を確認することもできます。

また、User.find(id)として、数回のキーストロークを節約することもできます。

「いいね!」 1

ジェイさん、こんにちは。すべてのユーザーを更新する必要はなく、IDのランダムなセットを持つ一部のユーザーだけを更新する必要があります。

u = User.find_by_id([150,152,167,258,665])で試しましたが、これは常に150 IDを返し、そのユーザーのみのパスワードを変更します。User.find(id: 150,152....)でも役に立ちませんでした…

注:フォーラムを別のディスカッションプラットフォームに移行しようとしており、多くのメッセージを書き込んだものの、もはやフォーラムに来ないユーザーがいます(そして、何らかの理由でこれらのユーザーのpassword_hashsalt列が空になっています。ユーザーインポートスクリプトでは、PGSQLデータベースでこれらの値が定義されていないユーザーをインポートすることはできません)。そのため、パスワードのリセットを許可できません。複雑なパスワードを設定し、後で「パスワードを忘れました」オプションにアクセスして新しいパスワードをリセットできるようにすることができます。

User.where が求めているもので、配列に一致するものを見つけるための PostgreSQL 構文です。正確には思い出せません。

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

ユーザーIDの範囲(例えば100から300まで)を使用することも可能ですか?
よろしくお願いします。

はい、標準に準拠したSQLです。

「いいね!」 3