2016-05-04 80 views
1

を失敗した私は私のユーザモデルで以下の検証を持っている:メールが正規表現の検証

VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, 
    presence: true, 
    format: { with: VALID_EMAIL_REGEX } 

それは1通の電子メールを除いて電子メールのために正常に動作します。このメールが有効である必要があります。失敗したテストは次のとおりです。

it 'should accept a domain with more than 4 letters', focus: true do 
    user.email = '[email protected]' 
    expect(user.valid?).to be(true) 
    end 

このテストは合格です。 ?あなたはpython-email-validatorを使用していないのはなぜ

#<EmailValidator:0x000000075b04d0 
    @attributes=[:email], 
    @options={:if=>#<Proc:[email protected]/usr/local/rvm/gems/[email protected]/gems/devise_token_auth-0.1.37/app/models/devise_token_auth/concerns/user.rb:30>}>, 
#<ActiveRecord::Validations::PresenceValidator:0x00000007414338 @attributes=[:email], @options={}>, 
#<ActiveModel::Validations::FormatValidator:0x0000000740ef28 @attributes=[:email], @options={:with=>/\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i}>, 
#<ActiveModel::Validations::LengthValidator:0x0000000740de98 @attributes=[:email], @options={:minimum=>6, :maximum=>100}>, 
#<ActiveRecord::Validations::UniquenessValidator:0x0000000740ccf0 
+0

テストを開いて、ユーザーがどのようなエラーが発生しているのか確認できますか? (電子メールのバリデーターが何が失敗しているかをダブル確認してください) –

+0

はい、私はそれを電子メールです。私はユーザーモデルのすべての検証もチェックしました。これは正しい式です(User.validations_on(:email))。私はまた、他の5つのテストをメールで受け取ります。 –

+0

これは、テストで大歓迎です。@messages = {:email => ["このフィールドはメールではありません"]} –

答えて

1

これがために問題を引き起こしdevise_auth_token宝石は、デフォルトの工夫の電子メールの検証をオーバーライドしている問題(https://github.com/lynndylanhurley/devise_token_auth/issues/314)のようですいくつかの人々。残念ながら、使用したいフォーマット/バリデータを更新した宝石を伝える良い方法があるとは思われません。これは、3つの非理想的なオプションであなたを残します:

  1. 猿が問題のクラスをパッチ目立たない行動に別の宝石を探す(EmailValidator)あなたが必要と提出の更新/変更に
  2. フォーク宝石PR

申し訳ありませんが、この:(

乾杯を修正するために素敵な/簡単な方法があるようには思えない。

+1

あなたは本当に問題を見つけました...それは私に多くの時間を取っていただろう。すべてのあなたの助けとあなたの時間が私の質問に費やしてくれてありがとう –

0

:任意のアイデア(私は電子メールの検証のために完全に正規表現を変更することに開いています)

これらは、電子メールのフィールド上のUserモデル上のすべてのバリデータがありますか?

をインストールします。

pip install email_validator 

使用例

from email_validator import validate_email, EmailNotValidError 

email = "[email protected]" 

try: 
    v = validate_email(email) # validate and get info 
    email = v["email"] # replace with normalized form 
except EmailNotValidError as e: 
    # email is not valid, exception message is human-readable 
    print(str(e)) 
+0

私はライブアプリでこれを行う必要があります、私はむしろバリデーションのためにもっと多くのものをインストールしないでください... –