在Rails编辑操作表单中,隐藏表单字段

时间:2016-05-08 10:42:03

标签: ruby-on-rails ruby rest

我有一个Rails应用程序,其中我不希望某些表单字段出现在我的编辑操作表单中。

我怎样才能在rails中这样做?

3 个答案:

答案 0 :(得分:3)

一种可能性是使用ActiveRecord中的persisted?函数来检测表单对象是否已经持久保存到数据库,而不是新对象。

<%= form_for @user do |f| ->

  <%- if @user.persisted? %>
    <%# Will only show if @user has been saved to the database %>
    <%= f.text_field :some_attribute_to_show_during_edit %>

答案 1 :(得分:2)

您有3个常用选项可以创建未在页面上显示的字段:

  • 创建隐藏类型输入字段
  • 使用CSS隐藏字段
  • 忽略页面中的字段

这个答案描述了所有这些以及如何使用它们。哪种方法在您的具体情况下效果最好,完全取决于您要完成的任务。我的最新应用程序使用所有这些技术,有时所有这些技术都在同一页面上。

这些不是唯一的选项,但这涵盖了隐藏字段的最常见要求。

隐藏类型输入字段

HTML有一种称为“隐藏”的输入字段,允许您在提交表单时将数据保存在将与所有其他字段一起发送到服务器的页面上。但是,隐藏类型字段永远不能更改为显示的字段;它总是隐藏的。你可以这样做:

<input type="hidden" id="my_id" name="my_name" value="my value">

使用Rails表单助手,您可以使用此标记获得相同的效果:

<%= f.hidden_field :my_id, value: my.value %>

或者,如果您的数据与模型对象无关,则可以使用此标记:

<%= hidden_field_tag :my_id, my.value %>

您可以在[Rails指南表格助手]中找到更多信息。 1部分中的Other Helpers of Interest页面。

用于隐藏字段的CSS样式

创建字段时,可以使用CSS样式来确定字段的初始可见性。使用CSS样式时,该字段对用户不可见,但在提交表单时将发送到服务器。

您可以使用CSS样式来使用HTML元素上的style="display: none;"属性隐藏字段。这是一个简单的HTML示例:

<input type="text" style="display: none;" id="my_id" name="my_name">

使用任何用于创建输入字段的Rails帮助程序,您可以使用style: "display: none;" HTML属性选项,如下所示:

<%= f.text_field :my_field, style: "display: none;" %>

如果您有动态Javascript行为,稍后会在某些事件发生时显示该字段,这通常很有用,但是,该技术仅用于避免在不需要时显示字段。

忽略页面中的字段

当您在Rails视图中编写条件代码时,此选项很有用,因此某些字段将发送到呈现的页面,而某些字段则不会。以下是如何做到这一点:

<%= form_for @my_model do |f| %>
  <% if some_condition %>
    <% f.text_field :my_field %>
  <% end %>
<% end %>

在这种情况下,如果my_fieldsome_condition,则true文字字段将仅包含在网页上。这样,只需在渲染视图时将不需要的组件留出即可轻松清理复杂的表单。

答案 2 :(得分:1)

为什么不从视图中删除它们?