2009-03-26 6 views
2

J'ai un formulaire d'enregistrement d'utilisateur, et je voulais écrire un humain capturant "captcha" dans ma méthode de registre. J'ai décidé de créer une question mathématique simple à laquelle les utilisateurs répondraient (cela devrait fonctionner pour mes objectifs).Comment valider un champ de formulaire externe dans un formulaire Ruby on Rails (tel qu'un captcha)?

Comment écrire une validation qui vérifie la valeur de ce champ? J'ai écrit une méthode validate dans mon fichier de modèle comme suit:

def validate 
    errors.add(:humanproof, "is not the right answer") if humanproof != 4 
end 

Cependant depuis: humanproof ne fait pas partie du modèle de l'utilisateur, la variable « humanproof » n'est pas disponible là-bas.

Quelle est la meilleure façon d'accéder à la variable humanproof?

Répondre

4

Ce que vous pouvez faire est d'ajouter un attribut virtuel. Découvrez ce screencast de RailsCasts.

Fondamentalement, vous voulez ajouter un attribut à votre classe. Comme vous n'avez pas besoin d'exécuter de logique, vous pouvez simplement utiliser les variables d'instance du formulaire de méthode Ruby.

class Foo < ActiveRecord::Base 
    attr_accessor :humanproof 

    def validate 
    errors.add(:humanproof, "is not the right answer") if humanproof != 4 
    end 

Cela ajoute un attribut à votre classe qui ne sont pas enregistrées dans la base de données et est attaché à l'objet pendant toute la durée de la demande.

Questions connexes