1

這裏是我的榜樣Rails的即插即用驗證

class User < ActiveRecord::Base 
    validates_with EmailValidator 
end 

class EmailValidator < ActiveModel::Validator 
    def validate(record) 
    if record != someregex 
     record.errors.add(:email, 'invalid email') 
    end 
    end 
end 

現在我可以用這個EmailValidator任何模型。但我的要求是驗證其獨特性和存在性,也適用於該特定型號。

如果我能做到這一點,我可以使用這個EmailValidator進行任何模型電子郵件驗證功能獨特的存在。

然後我可以實現更多可重用的Validator。

回答

0

您可以通過重寫你的驗證是EachValidator做到這一點:

class EmailValidator < ActiveModel::EachValidator 
    def validate_each(record, attribute, value) 
    if attribute !~ someregex 
     record.errors.add attribute, (options[:message] || 'invalid email') 
    end 
    end 
end 

然後在你的模型:

validates :email, email: true, uniqueness: true, presence: true 

希望有所幫助。