Rails는 편집 할 수없는 텍스트 필드입니다.


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>

보시다시피 두 텍스트 필드는 jquery 함수에 의해 자동으로 채워지고 사용자가 처리하도록 허용하지 않기 때문에 비활성화됩니다. 문제는 이런 식으로 뷰가 비활성화되어 있기 때문에 해당 매개 변수를 컨트롤러에 전달하지 않는다는 것입니다 !!! 편집 불가능한 text_field를 컨트롤러에 전달하는 다른 방법이 있습니까? 텍스트 상자 내부의 사용자에게 결과를 표시하고 싶기 때문에 숨겨진 필드를 사용하지 않도록주의하십시오.

TNX


제출하기 전에 jquery로 필드를 활성화하지 않습니까?
apneadiving

나는 그것을하고있다. 그렇게하는 더 깨끗한 방법이 있는지 당신은 모른다?
Joe

답변:


196

읽기 전용으로 만드십시오!

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

9
이것에 주목하십시오. W3 양식에 대한 사양을 구별하는 disabledread-only및 비활성화 입력이 폼 데이터와 함께 제출되지 않아야 함을 취소합니다.
Robin Fisher

1
감사! 나는 아마도 :disabled => true내 분야를 제출하지 않은 이유를 알아내는 데 30 분 더 걸렸을 것이다 .
톰 해리슨

3
하지만이 필드에 액세스 할 수 있도록하려면 Create어떻게해야합니까?
복제

1
그러나이 방법을 사용하면 누구나 제출하기 전에 편집 할 수 있습니다. 이것은 취약하지 않습니까?
mecyborg

1
예, 이것은 취약합니다. 사용자는 자신의 브라우저 "개발자 도구"(F12 누름)를 사용 readonly="readonly"하여 input태그 의 속성 을 제거하고 원하는대로 텍스트 필드를 편집 할 수 있습니다. 안전을 위해 정말로 필요한 경우 입력 필드를 모두 제거하거나 모델에서 양식 입력의 유효성을 검사하십시오. 어쨌든 그것은 매우 유용한 대답이었습니다.
BrunoFacca

1

트릭은 변경하고 싶지 않은 항목에 대해 레이블과 함께 "객체"를 사용하는 것입니다. 코드 작성 방법은 다음과 같습니다.

<%= location.label(:country, f.object.country) %>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.