如何在Ruby on Rails应用程序中禁用所有form_for输入字段?

Tin*_*n81 9 ruby ruby-on-rails ruby-on-rails-3

我试图稍微干掉我的Rails应用程序,所以我想在我的show视图中渲染一个表单但禁用所有输入字段.

// show.html.erb

<%= form_for(@project) do |f| %>
  <%= render 'fields', :f => f %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

谢谢你的帮助.

Ant*_*rto 20

使用Javascript

一种方法是使用JS来做到这一点.div在show视图中包含一个特定的类:

// show.html.erb

<div class='disable_input'>
  <%= form_for(@project) do |f| %>
    <%= render 'fields', :f => f %>
  <% end %>
</div>
Run Code Online (Sandbox Code Playgroud)

然后在你的JS文件中:

$('.disable_input :input').prop('disabled', true);
Run Code Online (Sandbox Code Playgroud)

轨道

如果你想实际生成它的服务器端,你可以将一个变量传递给你的部分,它将告诉部分是否必须在每个字段上添加禁用选项.虽然这是一个更多的工作!

使用变量,您可以执行以下操作:

<%= form_for(@project) do |f| %>
  <%= render 'fields', :f => f, :disabled => true %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

在部分:

<% 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 %>
Run Code Online (Sandbox Code Playgroud)

表单构建器

编辑:实际上,避免明确传递disabled到处的一种方法是创建一个Custom form builder.有一些很好的资源可以讨论它,比如这个:http://johnford.is/writing-a-custom-formbuilder-in-rails/

在这个例子中,它已经完成了onkeypress,不应该很难适应你的情况!


pir*_*lly 15

你可以包装所有字段 <fieldset disabled>

// show.html.erb

<%= form_for(@project) do |f| %>
  <fieldset disabled>
    <%= render 'fields', :f => f %>
  </fieldset>
<% end %>
Run Code Online (Sandbox Code Playgroud)