我想創建rake任務,將沒有用戶名的所有用戶的用戶名設置爲他們電子郵件地址中「@」之前的部分。所以如果我的電子郵件是[email protected],我的用戶名應該成爲測試。如果它不可用,請用數字(1)作爲前綴。如何從所有用戶的電子郵件設置用戶名?
所以我有問題女巫檢查用戶名的uniqness。下面的代碼在第二個循環後不工作:當我有三封電子郵件:[email protected],[email protected],[email protected] [email protected]的用戶名將爲空。
我當然有用戶模型中的用戶名的uniqness驗證。
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
其他的想法是要點:https://gist.github.com/3067635#comments
是否有一個原因,你不能只使用完整的電子郵件地址作爲用戶名?當然,這保證了獨特性。 – 2012-07-09 13:05:24
是這是在我的應用程序的規範,它將在其他模型中用作索引鍵 – tomekfranek 2012-07-09 13:10:24