Текстове поле не можна редагувати


82

У мене є form_for, написана таким чином:

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

Як бачите, 2 текстові поля вимкнено, оскільки вони автоматично заповнюються функцією jquery, і я не хочу, щоб користувач обробляв їх. Проблема полягає в тому, що таким чином подання не передає ці параметри контролеру, оскільки вони відключені !!! Чи є інший спосіб передати нередаговане поле text_field контролеру, подбавши про те, щоб я не хотів використовувати приховане поле, оскільки я хочу показати результати користувачеві всередині текстового поля

TNX


з хіба ви не вмикаєте поля з jquery перед поданням?
апноедівінг

Я роблю це ... хіба ви не знаєте, чи є для цього чистіший спосіб?
Джо

Відповіді:


196

Зробіть це лише для читання!

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

9
Почніть із цим. Специфікація W3 для форм вирізняє disabledі read-onlyчітко вказує, що відключені вводи не повинні подаватися разом із даними форми.
Робін Фішер,

1
Дякую! Я, мабуть, витратив би ще півгодини, розгадуючи, чому :disabled => trueне подав своє поле.
Том Гаррісон,

3
Але що, якщо я хочу, щоб це поле було доступним під час Createдії?
Клон

1
Але за допомогою цього методу кожен може редагувати перед поданням. Хіба це не вразливо.
mecyborg

1
Так, це вразливе місце. Користувач може скористатися своїм браузером "Інструменти розробника" (натиснути F12), щоб видалити readonly="readonly"атрибут inputтегу та відредагувати текстове поле за своїм бажанням. Якщо вам це дійсно потрібно для безпеки, видаліть поле введення цілком або підтвердьте введення форми в моделі. Це була дуже корисна відповідь у будь-якому випадку.
BrunoFacca

1

Фокус полягає у використанні "об'єкта" у поєднанні з міткою для всього, що ви не хочете змінювати. Ось як слід його кодувати:

<%= location.label(:country, f.object.country) %>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.