2

指定された名前に基づいてユーザー名を作成しようとしています。多くの人が「ジョン」と名付けられているので、何らかの方法でこれを確認し、+1 カウントに従って作成する必要があります。

この場合、 ActiveRecord を反復して というユーザー名を見つける方法に少し迷っています。john既に存在する場合は試しjohn1てみて、利用できない場合は試してみてくださいjohn2。使用すると思いますwhileが、この場合に反復する方法がわかりません。

これを行う方法はありますか?

4

1 に答える 1

2

データベースに何度もアクセスしないようにするには、名前に一致するユーザーのリストを取得し、ユーザーの数を確認し、その数を名前に追加してから、既に読み込まれているコレクションで新しい名前を確認します。

次のようになります。

name = params[:name]
users = User.where(User.arel_table[:name].matches("#{params[:name]}%")).to_a
count = users.length

name_without_collision = if count > 0
  loop do
    break "#{name}#{count}" unless users.any? { |u| u.name == "#{name}#{count}" }
    count += 1
  end
else
  name
end

を呼び出しto_aているActiveRecord::Relationので、データベースが標準のRuby配列に変換されているため、誤って複数のクエリをデータベースに送信することを心配する必要はありません。

于 2012-12-10T03:57:41.790 に答える