2008-09-19 4 views
12

Dans mon modèle j'ai:Comment écrire une méthode de validation personnalisée avec des paramètres pour mon modèle ActiveRecord?

validate :my_custom_validation 

def my_custom_validation 
errors.add_to_base("error message") if condition.exists? 
end 

Je voudrais ajouter quelques paramètres à MyCustomer vaildation comme ceci:

validate :my_custom_validation, :parameter1 => x, :parameter2 => y 

Comment puis-je écrire la fonction mycustomvalidation pour tenir compte des paramètres?

Répondre

6

Les validateurs ont généralement un paramètre de tableau indiquant, d'abord, les champs à valider et enfin (s'il existe) un hachage avec les options. Dans votre exemple:

:my_custom_validation, parameter1: x, parameter2: y 

: my_custom_validation serait un nom de champ, tandis que paramètre1: x, paramètre2: y serait un hachage:

{ parameter1: x, parameter2: y} 

Par conséquent, vous feriez quelque chose comme:

def my_custom_validation(*attr) 
    options = attr.pop if attr.last.is_a? Hash 
    # do something with options 
    errors.add_to_base("error message") if condition.exists? 

end 
2

Vous pouvez juste faire quelque chose comme ceci:

def validate 
    errors.add('That particular field', 'can not be the value you presented') if !self.field_to_check.blank? && self.field_to_check == 'I AM COOL' 
end 

Pas besoin d'appeler la référence, comme je crois que la méthode validate est traitée (si elle existe) après une validates_uniqueness_of -comme validation.

Ajouté: Plus d'informations dans les documents de l'API Rails here.

Questions connexes