web-dev-qa-db-ja.com

Rails 3.1.0ビューで読み取り専用のフィールドを設定するにはどうすればよいですか?

私の質問は、Railsフォームの読み取り専用です。以下はquotesコントローラーの選択ボックスです。ユーザーは選択を変更できません。

  <% @quote.test_items.each do |t| %> 
    <%= f.association :test_items, :label => false, :selected => t.id %>
  <% end %>

アプリはsimple_formを使用します。本当にありがとう。

13
user938363

同様の問題が発生しました。ありがたいことに、簡単な解決策があります。

基本的な問題は、simple_formで:disabled => trueを使用すると、その値がコントローラーに表示されないことです。 HTMLフォームからオブジェクトを渡して後でモデルにバインドする場合、これらの属性がすべて必要です。ただし、:disabled => trueはそのような属性を渡しません。

これに対する解決策は、:readonly => trueを使用することです。これにより、フィールドがユーザー入力から保護され、param値がコントローラーに返されるため、すべてをモデルにバインドできます。

幸運を。

https://github.com/plataformatec/simple_form/pull/367 を参照してください

42
gk0r

:disabled => trueを渡すだけだと思います。オプションがsimple_formで「うまく機能する」というのは私の経験です。だからあなたの場合:

<% @quote.test_items.each do |t| %> 
  <%= f.association :test_items, :label => false, :disabled => true, :selected => t.id %>
<% end %>

simple_form github repo から:

SimpleFormに:disabledオプションを指定することもできます。これにより、cssクラスでラッパーが無効として自動的にマークされるため、ラッパー内のラベル、ヒント、その他のコンポーネントのスタイルを設定することもできます。

6
Matthew Lehner

上記の上位の回答はすべて間違っています。

無効な属性の動作は読み取り専用とは異なります。

それらを読んで比較します。

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 %>
3
Axil

はい、@ gk0rが言ったことはそのままです ここに記載されています

注:HTMLオプションdisabledreadonly、およびmultipleはすべてブール値として扱うことができます。したがって、:disabled => trueを指定すると、disabled="disabled"が得られます。

* disabledは、読み取り専用とは少し異なる動作をします。

2
Jay H.

アソシエーションメソッドが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

2
jordanpg