2016-10-07 9 views
-1

内の属性の変更は、私はと呼ばれるテーブルを持っている場合:colsので招待:名前、電子メール検証Railsの

Userテーブル2つのcolsの持っている:電子メールを、

ユーザーSECONDARY_EMAILた​​いが、友人になるユーザーBを招待。 AがすでにBをEメールで招待している場合、AがBをsecondary_email経由で再度招待すると、別のEメールですでに招待されています。 検証を書いて正常に動作します。

問題は次のとおりです。Bのsecondary_emailですでにいくつかの招待状が更新されていても、それはエラーをスローしません。

validate :is_already_invited?, 
     on: :update, 
     if: :email_changed? 

validate :is_already_invited?, 
     on: :create 

def is_already_invited? 
    user = User.where(secondary_email: self.email).first 
    if user 
    self.inviter.friendships.each do |friendship| 
     friendship.errors[:email] = "is already invited under different email address." if (friendship.email = user.email) 
    end 
    end 
end 

電子メールが変更された場合にモデルを更新時に検証する方法。 email_changed

TKS

+0

?条件は、電子メールが変更された場合にのみチェックされます。 secondary_emailが変更されていないか、正しくありません。 – Jayaprakash

+0

@Jayaprakashええと、フォームの変更による電子メールの入力を確認します。私はちょうど電子メールが変更されたときにのみ検証する必要があるため、毎回の保存や更新の記録ではない –

答えて

1
validate :is_already_invited?, on: :update 

    def is_already_invited? 
     if email_changed? 
      user = User.where(secondary_email: self.email).first 
      if user 
      self.inviter.friendships.each do |friendship| 
       friendship.errors[:email] = "is already invited under different email address." if (friendship.email = user.email) 
      end 
      end 
     end 
    end 
+0

は動作しません:(それでも、 –