10

showRailsアプリケーションを少し乾かそうとしているので、ビューにフォームをレンダリングしたいのですが、すべての入力フィールドを無効にします。

// show.html.erb

<%= form_for(@project) do |f| %>
  <%= render 'fields', :f => f %>
<% end %>

それを行うための最良の方法は何でしょうか?

助けてくれてありがとう。

4

3 に答える 3

21

Javascript

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に行われています、あなたのケースに適応するのは難しいことではありません!

于 2012-11-04T14:53:04.380 に答える
20

すべてのフィールドをでラップできます<fieldset disabled>

// show.html.erb

<%= form_for(@project) do |f| %>
  <fieldset disabled>
    <%= render 'fields', :f => f %>
  </fieldset>
<% end %>
于 2016-01-21T13:46:29.647 に答える
-2

これにはスタイルシートを使用できます。

showアクションは、コントローラーに「Project」と表示されている可能性があります。したがって、コントローラーの名前が付いたファイルがスタイルシートに含まれている可能性があります。

次に、フォームをdivのshow.html.erbで囲み、どのページのどの要素にも指定しない一意のID、たとえば「disable_input」を指定します。

次に、このdivの下にあるcssのすべての入力フィールドを無効にします。このように書くことができます。

disable_input input {
#やりたいことは何でも
}

したがって、コーディングする必要はありません。

于 2012-11-04T14:47:57.503 に答える