ユーザー名またはメールアドレスからユーザーIDを検索

古いニュースフィードのアーカイブを JSON 形式で保持しており、新しいフォーラムの「ニュース」カテゴリをこのデータで埋めたいと考えています。フィード内のすべての投稿は、すでにフォーラムアカウントを持っているユーザーによって行われたものです。最も簡単な方法は、汎用 JSON インポータを修正して、新規ユーザーを作成するのではなく、既存のユーザー(ユーザー名またはメールアドレスで)を検索するようにすることだと考えられます。

入力 JSON に空の users リストを指定することで新規ユーザーの作成を回避し、/srcipts/import_scripts/json_generic.rb 内の各投稿のユーザー ID を設定する以下の行を変更すればよいようです:

user_id: user_id_from_imported_user_id(username_for(first_post["author"])) || -1

つまり、このキーと値のペアの値を、インポータが以前に作成したユーザーの ID を検索する代わりに、既存のユーザー ID を取得するものに変更する必要があります。

既存のユーザーの ID を、ユーザー名またはメールアドレスからどのように検索すればよいでしょうか?

API を使用して実行できます。

JSON API を通じてユーザーを検索できることは理解していますが、Discourse 自体が Ruby で動作している以上、JSON API を呼び出すよりも、必要な関数を直接呼び出す方がよりシンプルではないでしょうか?これが本当に推奨される方法なのでしょうか?私が確認したインポーターのコードでは、JSON API が使われている箇所はどこにも見当たりません。

Discourseへのインポートからだいぶ時間が経っているので確かなことは言えませんが、もしかしたら他の誰かがご存知かもしれません。私は時々、メールアドレスやIDでユーザーをまとめて検索する必要があるので、APIを使っています。

探していたのはこれでした:

User.find_by_username(username)&.id