Trường văn bản không thể chỉnh sửa đường ray


82

Tôi có một form_for được viết theo cách sau:

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

Như bạn có thể thấy 2 trường văn bản bị vô hiệu hóa vì chúng được tự động điền bởi một hàm jquery và tôi không muốn để người dùng xử lý chúng. Vấn đề là theo cách này, chế độ xem không chuyển các tham số đó đến bộ điều khiển vì bị vô hiệu hóa !!! Có cách nào khác để chuyển text_field không thể chỉnh sửa vào bộ điều khiển không, hãy cẩn thận rằng tôi không muốn sử dụng trường ẩn vì tôi muốn hiển thị kết quả cho người dùng bên trong hộp văn bản

TNX


với bạn không bật các trường với jquery trước khi gửi?
apneadiving

Tôi đang làm việc đó ... bạn không biết có cách nào sạch hơn để làm như vậy không?
Joe

Câu trả lời:


196

Làm cho nó chỉ đọc!

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

9
Phát hiện ra điều này. Đặc tả W3 cho biểu mẫu phân biệt disabledread-onlylàm rõ rằng không nên gửi các đầu vào bị vô hiệu hóa cùng với dữ liệu biểu mẫu.
Robin Fisher

1
Cảm ơn! Tôi có lẽ sẽ dành nửa giờ nữa để tìm ra lý do tại sao :disabled => truekhông gửi lĩnh vực của mình.
Tom Harrison

3
Nhưng nếu tôi muốn trường này có thể truy cập được khi Createthực hiện?
bản

1
Nhưng với phương pháp này, bất kỳ ai cũng có thể chỉnh sửa trước khi gửi. Đây không phải là dễ bị tổn thương.
mecyborg

1
Vâng, điều này là dễ bị tổn thương. Người dùng có thể sử dụng trình duyệt của mình "Công cụ dành cho nhà phát triển" (nhấn F12) để xóa readonly="readonly"thuộc tính của inputthẻ và chỉnh sửa trường văn bản theo ý muốn. Nếu bạn thực sự cần điều này để an toàn, hãy xóa hoàn toàn trường nhập hoặc xác thực đầu vào biểu mẫu tại mô hình. Đó là một câu trả lời rất hữu ích dù sao.
BrunoFacca

1

Bí quyết là sử dụng "đối tượng" kết hợp với nhãn cho bất kỳ thứ gì bạn không muốn thay đổi. Đây là cách bạn nên viết mã nó:

<%= location.label(:country, f.object.country) %>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.