2010-11-19 3 views
2

Je suis nouveau dans le langage Ruby et le framework Rails. Quand j'ai vu ce morceau de code de la "Head First Rails" livre:Dans Rails, comment sont implémentés les validateurs, par exemple "validates_numericality_of"?

classe ClientWorkout < ActiveRecord :: Base

validates_numericality_of: paid_amount

fin

Mes questions sont les suivantes:

1) A partir du langage Ruby, où et comment est validates_numericality_of implémenté? Est-il disponible pour les classes Ruby en dehors du framework ActiveRecord?

2) Que fait validates_numericality_of aux instances de la classe ClientWorkout?

Merci.

Répondre

0

La valeur validates_numericality_of valide si la valeur de l'attribut spécifié est numérique. Enregistrement actif est votre modèle et chaque modèle correspond à une table dans la base de données. Donc, si vous utilisez validates_numericality_of dans la classe ClientWorkout, cela ne validerait que la valeur payée dans cette classe/ce modèle.

1

1) validates_numericality_of est l'une des nombreuses validations qui existent dans le framework Rails, ou ActiveRecord pour être plus précis. Ce n'est donc pas quelque chose d'accessible pour toutes les classes Ruby. Vous utilisez des symboles ruby ​​qui représentent les attributs du modèle. Vous pouvez passer plusieurs attributs en même temps:

validates_numericality_of :age, :score 

Mais vous pouvez également spécifier la validation plusieurs fois si vous voulez différents paramètres pour les différents attributs:

validates_numericality_of :age 
validates_numericality_of :score, :allow_nil => true 

2) Qu'est-ce que les validations en général font est pour valider si le modèle est "valide" avant d'enregistrer dans la base de données lors de l'appel de ClientWorkout.save(). validates_numericality_of fait comme le nom implique de valider que les attributs passés sont numériques et non une chaîne, un tableau, un booléen etc.

Si l'une des validations n'est pas remplie, l'enregistrement ne sera pas sauvegardé dans la base de données. Ceci peut bien entendu être contourné en appelant ClientWorkout.save (false) qui demandera à ActiveRecord de sauvegarder sans valider l'enregistrement.

+0

Cet article répond à ma première question: http://www.vitarara.org/cms/ruby_metaprogamming_declaratively_adding_methods_to_a_class – mnguyen1nc