Schienen nicht bearbeitbares Textfeld


82

Ich habe ein form_for wie folgt geschrieben:

<div class="field">
    <%= location.label :city %>
    <%= location.text_field :city, :disabled=>true%>
</div>
<div class="field">
    <%= location.label :country %>
    <%= location.text_field :country, :disabled=>true%>
</div>

Wie Sie sehen können, sind die 2 Textfelder deaktiviert, da sie von einer Abfragefunktion automatisch ausgefüllt werden und ich nicht möchte, dass der Benutzer damit umgeht. Das Problem ist, dass auf diese Weise die Ansicht diese Parameter nicht an die Steuerung weitergibt, da sie deaktiviert sind !!! Gibt es eine andere Möglichkeit, nicht bearbeitbares Textfeld an den Controller zu übergeben, wobei darauf zu achten ist, dass ich kein verstecktes Feld verwenden möchte, da ich die Ergebnisse dem Benutzer in einem Textfeld anzeigen möchte

TNX


mit aktivieren Sie Felder mit jquery nicht vor der Übermittlung?
Apneadiving

Ich mache es ... weißt du nicht, ob es einen saubereren Weg gibt?
Joe

Antworten:


196

Mach es schreibgeschützt!

<%= location.text_field :country,:readonly => true%>

9
Genau das Richtige. Die W3-Spezifikation für Formulare unterscheidet disabledund read-onlymacht deutlich, dass deaktivierte Eingaben nicht mit den Formulardaten übermittelt werden sollten.
Robin Fisher

1
Vielen Dank! Ich hätte wahrscheinlich noch eine halbe Stunde damit verbracht herauszufinden, warum :disabled => trueich mein Feld nicht eingereicht habe.
Tom Harrison

3
Aber was ist, wenn ich möchte, dass dieses Feld in CreateAktion zugänglich ist ?
Klon

1
Mit dieser Methode kann jedoch jeder vor dem Senden bearbeiten. Ist das nicht verletzlich?
Mecyborg

1
Ja, das ist anfällig. Der Benutzer kann mit seinem Browser "Developer Tools" (drücken Sie F12) das readonly="readonly"Attribut des inputTags entfernen und das Textfeld nach seinen Wünschen bearbeiten. Wenn dies wirklich sicher sein muss, entfernen Sie das Eingabefeld vollständig oder überprüfen Sie die Formulareingabe am Modell. Das war sowieso eine sehr nützliche Antwort.
BrunoFacca

1

Der Trick besteht darin, "Objekt" in Verbindung mit einer Beschriftung für alles zu verwenden, was Sie nicht ändern möchten. So sollten Sie es codieren:

<%= location.label(:country, f.object.country) %>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.