2010-10-31 10 views
6

Ich möchte festlegen, dass ein Cookie in 1 Jahr abläuft, wenn das Kontrollkästchen "An mich erinnern" aktiviert ist.in Schienen, Was ist der Wert für eine Checkbox?

Ich habe eine Eingabe Checkbox Form wie:

<%= check_box_tag 'remember', '', false, :class => 'checkbox' %> 

Was ist der Wert, wenn es veröffentlicht wird?

Wird es wahr/falsch oder geprüft oder 1 oder? Ich setze den Wert auf '' im Helfer.

Antwort

-3

Sie erhalten in Ihrer Aktion die params

params['remember'] 

Wenn wenn überprüfen Sie die params mit falschen wie Wert. Wenn es nicht zu überprüfen ist, haben Sie keine Params an Ihre Aktion senden.

7

In der Schienen-API-Dokumentation hat dies hilfreich Erklärung der fehlenden Parameter und das verborgene Feld Work-around:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-check_box

check_box (object_name, Methode options = {}, checked_value = "1" , unchecked_value = "0")

Gibt ein Checkbox-Tag zurück, das für den Zugriff auf ein spezifiziertes Attribut (durch Methode identifiziert) auf ein der Vorlage zugewiesenes Objekt (durch Objekt identifiziert) zugeschnitten ist. Dieses Objekt muss ein Instanzobjekt (@object) und kein lokales Objekt sein. Es ist beabsichtigt, dass die Methode eine Ganzzahl zurückgibt, und wenn diese ganze Zahl über Null liegt, wird das Kontrollkästchen aktiviert. Zusätzliche Optionen für das Eingabe-Tag können als Hash mit Optionen übergeben werden. Der Parameter checked_value ist standardmäßig auf 1 gesetzt, während der Standardwert unchecked_value auf 0 gesetzt ist, was für boolesche Werte nützlich ist. Gotcha

Die HTML-Spezifikation besagt, dass nicht markierte Kontrollkästchen nicht erfolgreich sind, und daher Webbrowser senden sie nicht. Leider führt dies zu einem Fehler: Wenn ein Rechnungsmodell ein bezahltes Kennzeichen hat und in der Form, die eine bezahlte Rechnung bearbeitet, deaktiviert der Benutzer sein Kontrollkästchen, es wird kein bezahlter Parameter gesendet. Also, jede Massen Zuordnung Idiom wie

@ invoice.update_attributes (params [: Rechnung])

würde die Flagge nicht aktualisieren.

Um dies zu verhindern, generiert der Helfer ein verstecktes Zusatzfeld vor dem Kontrollkästchen. Das ausgeblendete Feld hat denselben Namen und seine Attribute ähneln einem nicht aktivierten Kontrollkästchen.

Auf diese Weise sendet der Client entweder nur das ausgeblendete Feld (das das Kontrollkästchen deaktiviert) oder beide Felder. Da die HTML-Spezifikation besagt, dass Schlüssel/Wert-Paare in der gleichen Reihenfolge gesendet werden müssen, in der sie im Formular erscheinen, und die Parameterextraktion das letzte Vorkommen eines wiederholten Schlüssels in der Abfragezeichenfolge erhält, funktioniert das für normale Formulare.

9

Die Checkbox gibt entweder 0 oder 1 zurück.

nicht vergleichen mit false und true, da dies möglicherweise zu Problemen führen, da 0true in Ruby ist.

+0

Ich weiß nicht, warum diese Antwort herabgestuft wurde, da es die Frage beantwortet, aber hier sind einige Quellen: http: // stackoverflow.com/questions/372652/Was-sind-die-Ruby-Gotchas-ein-Neuling-sollte-gewarnt werden-über http://railsforum.com/viewtopic.php?id=27353 – chech

Verwandte Themen