10

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

// show.html.erb

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

最好的方法是什么?

谢谢你的帮助。

4

3 回答 3

21

Javascript

一种方法是使用 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,应该不难适应你的情况!

于 2012-11-04T14:53:04.380 回答
20

您可以将所有字段包装在<fieldset disabled>

// show.html.erb

<%= form_for(@project) do |f| %>
  <fieldset disabled>
    <%= render 'fields', :f => f %>
  </fieldset>
<% end %>
于 2016-01-21T13:46:29.647 回答
-2

您可以为此使用样式表。

显示操作可能在控制器中说“项目”,因此您可能在样式表中有一个带有控制器名称的文件。

现在将您的表单包含在一个 div 中的 show.html.erb 中,并给它一个唯一的 id,比如“disable_input”,您不会给任何页面中的任何元素。

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

disable_input input{
# 你想做什么
}

因此无需编码。

于 2012-11-04T14:47:57.503 回答