2009-03-26 8 views
2

Ich habe ein Benutzerregistrierungsformular, und wollte einen menschlichen "Captcha" in meine Registermethode eingeben. Ich beschloss, eine einfache mathematische Frage zu erstellen, die Benutzer beantworten sollten (dies sollte für meine Zwecke funktionieren).Wie validiere ich ein externes Formularfeld in einem Ruby-on-Rails-Formular (z. B. ein Captcha)?

Wie schreibe ich eine Validierung, die den Wert dieses Feldes überprüft? Ich schrieb in meinem Modelldatei ein Validate-Methode wie folgt:

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

jedoch seit: humanproof nicht Teil des Benutzermodells ist, die „humanproof“ Variable dort nicht zur Verfügung steht.

Was ist der beste Weg, um auf die Humanproof-Variable zuzugreifen?

Antwort

4

Sie können ein virtuelles Attribut hinzufügen. Überprüfen Sie diese screencast von RailsCasts.

Grundsätzlich möchten Sie ein Attribut zu Ihrer Klasse hinzufügen. Da Sie keine Logik mit ihm ausführen müssen, können Sie einfach die in der Ruby-Methode erstellten Formularinstanzvariablen verwenden.

class Foo < ActiveRecord::Base 
    attr_accessor :humanproof 

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

Dies fügt ein Attribut der Klasse, die nicht in der Datenbank gespeichert und ist für die Dauer der Anforderung an dem Objekt angebracht.

Verwandte Themen