我试图稍微干掉我的Rails应用程序,所以我想在show
视图中呈现一个表单,但禁用所有输入字段。
// show.html.erb
<%= form_for(@project) do |f| %>
<%= render 'fields', :f => f %>
<% end %>
最好的方法是什么?
感谢您的帮助。
答案 0 :(得分:20)
一种方法是使用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);
如果要实际生成服务器端,可以将变量传递给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
完成的,不应该很难适应你的情况!
答案 1 :(得分:13)
您可以将<fieldset disabled>
// show.html.erb
<%= form_for(@project) do |f| %>
<fieldset disabled>
<%= render 'fields', :f => f %>
</fieldset>
<% end %>
答案 2 :(得分:0)
你可以使用样式表。
show动作可能在控制器中说'Project',因此您可能在样式表中有一个带有控制器名称的文件。
现在将您的表单封装在div中的show.html.erb中,并为其指定一个唯一的ID,例如'disable_input',您不会在任何页面中给出任何元素。
现在禁用此div下你css中的所有输入字段。你可以这样写..
disable_input输入{
#无论你想做什么
}
因此无需编码。