2014-01-25 31 views
1

是否有一種簡單的方法來驗證不包含子字符串的字段。我想要一個不包含'yahoo.com'的電子郵件字段。如果它包含'yahoo.com',我將會返回一個錯誤消息。rails model validattion(不包含子字符串)

+0

編寫您自己的自定義驗證程序似乎是實現此目的最簡單的方法 http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#custom-validators –

回答

2

無需添加自定義驗證只使用Rails的validates_format_for

validates_format_of :email, without: /yahoo\.com/i, message: "your custom message" 

查看文檔 http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_format_of

+0

謝謝,如何不包含yahoo.com和hotmail.com? – wwli

+0

如果您要添加複雜性,並添加多個不想在其中存在的文本,則應在下面演示自定義匹配器 - 您確實應該在一個地方將其隔離,以便隔離對該地點的更改 –

+0

你只需要調整正則表達式爲:validates_format_of:email,不需要:/(yahoo|hotmail)\.com/i,消息:「你的自定義消息」 –

1

由於意見建議 - 建立一個自定義的驗證

require 'active_model' 

class NotYahooEmailValidator < ActiveModel::EachValidator 

    def validate_each(object, attribute, value) 
    if value.include? "yahoo.com" 
     object.errors[attribute] << (options[:message] || "is a yahoo.com email address") 
    end 
    end 

end 

你會使用這個如下:

class User < ActiveRecord::Base 
    validates :email, :presence => true, :not_yahoo_email => true 
end 
+1

您是不是指'NotYahooEmailValidator'? :) –

+1

有趣的是,只是添加更正,因爲你鍵入評論:-) ...偉大的思想想 –

相關問題