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

时间:2012-11-04 14:16:40

标签: ruby-on-rails ruby ruby-on-rails-3

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

// show.html.erb

<%= form_for(@project) do |f| %>
  <%= render 'fields', :f => f %>
<% end %>

最好的方法是什么?

感谢您的帮助。

3 个答案:

答案 0 :(得分:20)

的Javascript

一种方法是使用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输入{
#无论你想做什么
}

因此无需编码。