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

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

 // show.html.erb   f %>  

最好的方法是什么?

谢谢你的帮助。

使用Javascript

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

 // show.html.erb 
<%= form_for(@project) do |f| %> <%= render 'fields', :f => f %> <% end %>

然后在你的JS文件中:

 $('.disable_input :input').prop('disabled', true); 

轨道

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

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

 <%= 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 %> 

表单构建器

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

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

您可以在

包装所有字段

 // show.html.erb <%= form_for(@project) do |f| %> 
<%= render 'fields', :f => f %>
<% end %>

你可以使用样式表来做这件事。

show动作可能在控制器中说’Project’,因此您可能在样式表中有一个带有控制器名称的文件。

现在将您的表单放在div中的show.html.erb中,并为其提供一个唯一的ID,例如’disable_input’,您不会给任何页面中的任何元素。

现在禁用此div下的所有输入字段。 你可以这样写..

disable_input input {
#无论你想做什么
}

因此无需编码。