メールアドレスの「@」の前の部分にユーザー名を付けずに、すべてのユーザーのユーザー名を設定する rake タスクを作成したいと考えています。したがって、私のメールアドレスが test@email.eu の場合、ユーザー名は test になります。利用できない場合は、先頭に数字 (1) を追加します。
そのため、ユーザー名の一意性をチェックする魔女に問題があります。以下のコードは、2 番目のループの後に機能しません。例: 3 つの電子メールがある場合: test@smt.com、test@smt.pl、test@oo.com test@oo.com のユーザー名は空になります。
もちろん、ユーザーモデルのユーザー名の一意性検証があります。
desc "Set username of all users wihout a username"
task set_username_of_all_users: :environment do
users_without_username = User.where(:username => ["", nil])
users_without_username.each do |user|
username = user.email.split('@').first
users = User.where(:username => username)
if users.blank?
user.username = username
user.save
else
users.each_with_index do |u, index|
pre = (index + 1).to_s
u.username = username.insert(0, pre)
u.save
end
end
end
end
その他のアイデアは Gist にあります: https://gist.github.com/3067635#comments