2016-05-08 84 views

回答

1

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

1

一种可能性是使用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 %> 
2

你有3个常用的选项,使字段不会在页面上显示出来:

  • 创建隐藏式输入字段
  • 隐藏与CSS领域
  • 略去领域从页面

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

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

隐藏式输入字段

HTML有一个名为“隐藏”类型的输入字段,可以让你保持表单提交时将被发送到服务器的所有其他领域的页面上的数据。但是,隐藏类型字段永远不能更改为显示字段;它总是隐藏的。你可以这样做,像这样:

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

与导轨形式助手,你可以使用这个标签来达到同样的效果:

<%= 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_field文本字段将只包括在页面上,如果some_conditiontrue。这使得通过简单地在渲染视图时将不需要的组件留空即可清理复杂的表单。