2015-09-06 48 views
0

我有一個應用程序運行Ruby on Rails與Devise的用戶管理。然而,當用戶編輯他們的帳戶或新用戶註冊時,我只希望他們被允許使用我學校的電子郵件地址,因此它必須包含@ uwo.caRails的設計只允許學校的電子郵件

但是,我想找到一個解決方案,將允許我補充更多的電子郵件在未來..

我在網上發現這個代碼,但我不能確定在哪裏把它

INVALID_EMAILS = %w(uwo.ca) 
validates_format_of :email, :without => /#{INVALID_EMAILS.map{|a| Regexp.quote(a)}.join('|')}/, :message => "That's a BAD EMAIL." 

回答

0

我認爲自定義驗證是更好的方法。

這個怎麼樣?

class User < ActiveRecord::Base 
    VALID_EMAILS = %w(uwo\.ca, example\.com) 
    validate :validate_email_formats 

    def validate_email_formats 
    VALID_EMAILS.each do |email_format| 
     return if self.email.to_s =~ /[email protected]#{email_format}$/ 
    end 
    errors.add(:email, "is a BAD EMAIL.") 
    end 
end 
+0

你有沒有測試過這個?至少有一個,也許是我看到的兩個問題。 –

+0

我試過這個,它有效,你看到的錯誤是什麼? @Jordan –

+0

對不起,我修改了部分代碼。我第一次發佈時有錯誤。 '%W(uwo.ca,example.com)'=>'%重量(UWO \ .CA,例如\ .COM)'與'%w'印記創建 –

4

這是一個驗證。它在你的模型中。有關於驗證的整個Rails指南:Active Record Validations。在你寫更多的代碼之前閱讀它。

您發佈的代碼顯然是用於列入多個電子郵件域名(ergo INVALID_EMAILS),這使其不適合您的目的,即將單個域名列入白名單。這也不是很好的代碼。所有你想要做的就是驗證的電子郵件地址與@uwo.ca結束,這意味着你希望它匹配正則表達式/@uwo\.ca$/。爲此,驗證是這樣的:

​​

而且,考慮使用I18n爲你的錯誤消息,而不是硬編碼他們在你的模型。

相關問題