Szyny nieedytowalne pole tekstowe

82

Mam form_for napisany w następujący sposób:

<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>

Jak widać, 2 pola tekstowe są wyłączone, ponieważ są automatycznie wypełniane przez funkcję jquery i nie chcę, aby użytkownik je obsługiwał. Problem w tym, że w ten sposób widok nie przekazuje tych parametrów do kontrolera, ponieważ są wyłączone !!! Czy istnieje inny sposób przekazania nieedytowalnego pola tekstowego do kontrolera, uważając, że nie chcę używać ukrytego pola, ponieważ chcę pokazać wyniki użytkownikowi w polu tekstowym

TNX

Joe
źródło
czy nie włączasz pól z jQuery przed przesłaniem?
nurkowanie na bezdechu
Robię to ... czy nie wiesz, czy można to zrobić w czystszy sposób?
Joe

Odpowiedzi:

196

Tylko do odczytu!

<%= location.text_field :country,:readonly => true%>
krunal shah
źródło
9
Spotkaj się z tym. Specyfikacja W3 dla formularzy rozróżnia disabledi read-onlywyjaśnia, że ​​wyłączone dane wejściowe nie powinny być przesyłane z danymi formularza.
Robin Fisher
1
Dzięki! Prawdopodobnie spędziłbym kolejne pół godziny, zastanawiając się, dlaczego :disabled => truenie zgłosiłbym swojego pola.
Tom Harrison
3
Ale co, jeśli chcę, aby to pole było dostępne w Createdziałaniu?
Klon
1
Ale dzięki tej metodzie każdy może edytować przed przesłaniem. Czy to nie jest wrażliwe.
mecyborg
1
Tak, to jest wrażliwe. Użytkownik może użyć „Narzędzi programistycznych” swojej przeglądarki (naciśnij F12), aby usunąć readonly="readonly"atrybut inputtagu i edytować pole tekstowe według własnego uznania. Jeśli naprawdę potrzebujesz tego dla bezpieczeństwa, usuń całkowicie pole wejściowe lub sprawdź poprawność danych wejściowych formularza w modelu. To i tak była bardzo przydatna odpowiedź.
BrunoFacca
1

Sztuczka polega na użyciu „obiektu” w połączeniu z etykietą do wszystkiego, czego nie chcesz zmieniać. Oto jak powinieneś to zakodować:

<%= location.label(:country, f.object.country) %>
mshasib
źródło