2012-05-06 9 views
1

deviseを使用して電子メールに基づいてユーザー名を自動的に作成できますか?Devise。彼の電子メールに基づいて自動的にユーザー名を作成する

登録ページには、電子メールとパスワードのフィールドしかありません。

たとえば、ユーザーが電子メール[email protected]で新しいアカウントを作成した場合、 私は彼のユーザー名が自動的にrandomnameになりたいと思います。どうしたらいいですか?

+0

[email protected]、[email protected]、[email protected]についてはどうしますか? –

+0

小さな聴衆がいるサイトではまれなケースだと思いますし、ユーザーは登録後にユーザー名を変更することもできます。とにかく、準備する方が良いので、コールバックを使用して、すでに取得したユーザー名にrandomname2/3 /などの接頭辞を追加します。 – evfwcqcg

答えて

5

^[^@]+のような正規表現を使用してメールアドレスの最初の部分を取得できます。@の前の文字列の先頭からすべてを返します。

^ /* start of string or line */ 
[^@] /* character class capturing everything except @ */ 
+ /* match must happen atleast one time */ 

ユーザー名をデータベースに追加するには、callbackを使用します。

class User < ActiveRecord::Base 
    before_create :set_username 

    private 
    def set_username 
     self.username = self.email[/^[^@]+/] 
    end 
end 
+2

[email protected]とho[email protected]の誰かがこの紛争を解決するにはどうすればいいですか? –

0

同じ名前でURLが異なるメールを処理するには、最後に乱数を追加できます。

self.username = "#{self.email[/^[^@]+/]}-#{SecureRandom.hex(1)}" 

これは、上記のコメントに2通の電子メールにhoobas-1fhoobas-3cを返します。

関連する問題