show
Railsアプリケーションを少し乾かそうとしているので、ビューにフォームをレンダリングしたいのですが、すべての入力フィールドを無効にします。
// show.html.erb
<%= form_for(@project) do |f| %>
<%= render 'fields', :f => f %>
<% end %>
それを行うための最良の方法は何でしょうか?
助けてくれてありがとう。
show
Railsアプリケーションを少し乾かそうとしているので、ビューにフォームをレンダリングしたいのですが、すべての入力フィールドを無効にします。
// show.html.erb
<%= form_for(@project) do |f| %>
<%= render 'fields', :f => f %>
<% end %>
それを行うための最良の方法は何でしょうか?
助けてくれてありがとう。
1つの方法は、JSを使用してそれを行うことです。div
ショービューに特定のクラスのを含めます。
// show.html.erb
<div class='disable_input'>
<%= form_for(@project) do |f| %>
<%= render 'fields', :f => f %>
<% end %>
</div>
次に、JSファイルで:
$('.disable_input :input').prop('disabled', true);
サーバー側で実際に生成する場合は、各フィールドに無効なオプションを追加する必要があるかどうかをパーシャルに通知する変数をパーシャルに渡すことができます。でももう少し手間がかかります!
変数を使用すると、次のようなことができます。
<%= form_for(@project) do |f| %>
<%= render 'fields', :f => f, :disabled => true %>
<% end %>
部分的に:
<% disabled ||= false
#We do this so if disabled is not passed to the partial it doesn't crash.
# We default it to false
%>
<% # Then for all your fields, add disabled: disabled %>
<%= f.text_field :some_attribute, disabled: disabled %>
編集:実際には、どこにでも明示的に渡さないようにする1つの方法は、disabled
を作成することCustom form builder
です。これについて話しているいくつかの良いリソースがあります:http://johnford.is/writing-a-custom-formbuilder-in-rails/
この例では、それはのためonkeypress
に行われています、あなたのケースに適応するのは難しいことではありません!
すべてのフィールドをでラップできます<fieldset disabled>
// show.html.erb
<%= form_for(@project) do |f| %>
<fieldset disabled>
<%= render 'fields', :f => f %>
</fieldset>
<% end %>
これにはスタイルシートを使用できます。
showアクションは、コントローラーに「Project」と表示されている可能性があります。したがって、コントローラーの名前が付いたファイルがスタイルシートに含まれている可能性があります。
次に、フォームをdivのshow.html.erbで囲み、どのページのどの要素にも指定しない一意のID、たとえば「disable_input」を指定します。
次に、このdivの下にあるcssのすべての入力フィールドを無効にします。このように書くことができます。
disable_input input {
#やりたいことは何でも
}
したがって、コーディングする必要はありません。