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

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

我怎么能在rails中这样做呢?

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

 <%= 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 %> 

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

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

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

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

隐藏类型输入字段

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

  

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

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

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

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

您可以在“ 其他感兴趣的帮助”部分的[Rails指南表格助手]页面上找到更多信息。

用于隐藏字段的CSS样式

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

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

  

使用任何用于创建输入字段的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 %> 

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

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