我正在尝试稍微干燥一下我的 Rails 应用程序,所以我想在我的show
视图中呈现一个表单,但禁用所有输入字段。
// show.html.erb
<%= form_for(@project) do |f| %>
<%= render 'fields', :f => f %>
<% end %>
最好的方法是什么?
谢谢你的帮助。
我正在尝试稍微干燥一下我的 Rails 应用程序,所以我想在我的show
视图中呈现一个表单,但禁用所有输入字段。
// show.html.erb
<%= form_for(@project) do |f| %>
<%= render 'fields', :f => f %>
<% end %>
最好的方法是什么?
谢谢你的帮助。
一种方法是使用 JS 来实现。在显示视图中包含div
具有特定类的 a:
// 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 %>
编辑:实际上,避免在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 %>
您可以为此使用样式表。
显示操作可能在控制器中说“项目”,因此您可能在样式表中有一个带有控制器名称的文件。
现在将您的表单包含在一个 div 中的 show.html.erb 中,并给它一个唯一的 id,比如“disable_input”,您不会给任何页面中的任何元素。
现在禁用此 div 下的 CSS 中的所有输入字段。可以这样写。。
disable_input input{
# 你想做什么
}
因此无需编码。