如何在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| %> <% end %>
你可以使用样式表来做这件事。
show动作可能在控制器中说’Project’,因此您可能在样式表中有一个带有控制器名称的文件。
现在将您的表单放在div中的show.html.erb中,并为其提供一个唯一的ID,例如’disable_input’,您不会给任何页面中的任何元素。
现在禁用此div下的所有输入字段。 你可以这样写..
disable_input input {
#无论你想做什么
}
因此无需编码。