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>

ご覧のとおり、2つのテキストフィールドはjquery関数によって自動入力されるため無効になっており、ユーザーに処理させたくありません。問題は、このように、無効になっているため、ビューがそのパラメーターをコントローラーに渡さないことです。編集できないtext_fieldをコントローラーに渡す他の方法はありますか?テキストボックス内のユーザーに結果を表示したいので、非表示のフィールドを使用したくないことに注意してください

TNX


送信する前にjqueryでフィールドを有効にしませんか?
2011

私はそれをやっています...そうするためのよりクリーンな方法があるかどうかわかりませんか?
ジョー

回答:


196

読み取り専用にしてください!

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

9
これに注目してください。フォームW3仕様は、無効にされた入力をフォームデータとともに送信してはならないこと区別disabledread-only、明確にしています。
ロビンフィッシャー

1
ありがとう!:disabled => true自分のフィールドを提出しなかった理由を理解するために、おそらくさらに30分を費やしたでしょう。
トムハリソン

3
しかし、Createアクションでこのフィールドにアクセスできるようにするにはどうすればよいですか?
クローン

1
しかし、この方法では、誰でも送信前に編集できます。これは脆弱ではありませんか。
mecyborg 2014

1
はい、これは脆弱です。ユーザーは、ブラウザの「開発者ツール」(F12キーを押す)を使用してreadonly="readonly"inputタグの属性を削除し、必要に応じてテキストフィールドを編集できます。これを安全にする必要がある場合は、入力フィールドを完全に削除するか、モデルでフォーム入力を検証してください。とにかくそれは非常に有用な答えでした。
BrunoFacca 2017年

1

秘訣は、変更したくないものにはラベルと組み合わせて「オブジェクト」を使用することです。コーディング方法は次のとおりです。

<%= location.label(:country, f.object.country) %>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.