0

Je dois ajouter un validateur personnalisé pour comparer deux dates: la date de début et la date de fin. J'ai créé validateur personnaliséValidateur personnalisé dans client_side_validations

class MilestoneDatesValidator < ActiveModel::EachValidator 
    def validate_each(record, attribute, value) 
    if record.start_date > record.end_date 
     record.errors.add(attribute, :end_date_less, options.merge(:value => value)) 
    end 
    end 
end 

et moi avons créé ClientSideValidations validateur personnalisé. Je ne savais pas comment je peux obtenir une autre dans les valeurs des attributs, mais j'ai essayé de le faire de telle manière:

ClientSideValidations.validators.local['milestone_dates'] = function(element, options) { 
    start_date = new Date($('#milestone_start_date').val()); 
    end_date = new Date($('#milestone_end_date').val()); 
    if(end_date < start_date) { 
    return options.message; 
    } 
} 

Mais il ne fonctionne/je n'ai pas erreur seulement après la page rechargeant, mais pas avec validations côté client. J'utilise client_side_validations (3.2.0.beta.3), client_side_validations-formtastic (2.0.0.beta.3), rails (3.2.3)

Répondre

1

Le code que vous avez fourni ci-dessus ne contient aucune mention de déclaration (et utilisation) d'une méthode d'assistance de validateur. Dans l'essai de initialiseur milestone_dates_validator.rb ajoutant ce qui suit à la fin du fichier:

module ActiveModel::Validations::HelperMethods 
    def validates_milestone_dates(*attr_names) 
    validates_with MilestoneDatesValidator, _merge_attributes(attr_names) 
    end 
end 

Et dans votre modèle appellent le validateur sur l'attribut/s vous validez:

validates_milestone_dates :milestone_ends_at