私の質問は、Railsフォームの読み取り専用です。以下はquotesコントローラーの選択ボックスです。ユーザーは選択を変更できません。
<% @quote.test_items.each do |t| %>
<%= f.association :test_items, :label => false, :selected => t.id %>
<% end %>
アプリはsimple_formを使用します。本当にありがとう。
同様の問題が発生しました。ありがたいことに、簡単な解決策があります。
基本的な問題は、simple_formで:disabled => true
を使用すると、その値がコントローラーに表示されないことです。 HTMLフォームからオブジェクトを渡して後でモデルにバインドする場合、これらの属性がすべて必要です。ただし、:disabled => true
はそのような属性を渡しません。
これに対する解決策は、:readonly => true
を使用することです。これにより、フィールドがユーザー入力から保護され、param値がコントローラーに返されるため、すべてをモデルにバインドできます。
幸運を。
https://github.com/plataformatec/simple_form/pull/367 を参照してください
:disabled => true
を渡すだけだと思います。オプションがsimple_formで「うまく機能する」というのは私の経験です。だからあなたの場合:
<% @quote.test_items.each do |t| %>
<%= f.association :test_items, :label => false, :disabled => true, :selected => t.id %>
<% end %>
SimpleFormに:disabledオプションを指定することもできます。これにより、cssクラスでラッパーが無効として自動的にマークされるため、ラッパー内のラベル、ヒント、その他のコンポーネントのスタイルを設定することもできます。
上記の上位の回答はすべて間違っています。
無効な属性の動作は読み取り専用とは異なります。
それらを読んで比較します。
http://www.w3schools.com/tags/att_input_disabled.asp
ヒント:フォーム内の無効な要素は送信されません。
http://www.w3schools.com/tags/att_input_readonly.asp
正しい答えは使用することです
:readonly => true
このようなもの:
<%= f.association :test_items, :label => false, :readonly => true, :selected => t.id %>
はい、@ gk0rが言ったことはそのままです ここに記載されています :
注:HTML
オプションdisabled
、readonly
、およびmultiple
はすべてブール値として扱うことができます。したがって、:disabled => true
を指定すると、disabled="disabled"
が得られます。
* disabledは、読み取り専用とは少し異なる動作をします。
アソシエーションメソッドがHTMLオプションを受け入れるかどうかはわかりませんが、受け入れる場合は、disabled: 'disable'
を渡して、固定値で読み取り専用にすることができます。
アソシエーションのドキュメントに示されているように、アソシエーションをブロックとして渡すことで、固定値を選択できる可能性があると思います。
f.association :company do |c|
c.input :name, selected: 'selection'
c.input :type
end
リスト全体を読み取り専用にしてドロップダウンできるかどうかについては、Googleから見た唯一の解決策はJSに関係しています。例:
http://techeyes.blogspot.com/2007/11/making-html-select-readonly.html