2010-01-14 3 views
6

J'ai ajouté un champ supplémentaire à mon nouvelle forme:champ non-modèle

<%= select_tag :quantity, options_for_select(["Select a Value"].concat((1..10).to_a)) %> 

Il spécifie le nombre de copies du dossier à créer.

Comment puis-je valider la présence (ou la numéricité) de ce champ, car il ne fait pas partie du modèle lui-même?

validates_presence_of :quantityéchoue !!!

Répondre

12

Trouvé. Vous pouvez ajouter un attribut virtuel dans le modèle.

......... 

attr_accessor :not_on_db 
......... 

validates_presence_of  :not_on_db, 
validates_length_of  :not_on_db, :within => 1..5 
......... 
1

Utilisez validates_numericality_of validation. La validation de la numéricité par défaut vérifie le type de flottant, vous devez dire que vous voulez voir les entiers. Comme la quantité ne sera pas stockée dans db, elle doit être virtuelle.

Essayez ceci:

attr_accessor :quantity 
validates_numericality_of :quantity, :only_integer => true 

validates_numericality_of n'accepte pas nulle par défaut, vous ne devriez pas avoir besoin de vérifier la présence de l'attribut, et que vous pouvez modifier la plage de la quantité dans la vue I ne le validerait pas ici.

Si vous voulez valider la plage, déclarez-la comme constante dans le modèle. Reportez-vous à cette constante à la fois dans la validation et la vue.

+0

J'ai reçu l'exception suivante avec cette implémentation: méthode non définie 'quantity_before_type_cast ' Des idées? – Lee

+0

Vous pouvez écrire la méthode 'quantity_before_type_cast 'et renvoyer self.quantity. Ce n'est pas très propre mais une solution. –