2016-05-08 82 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。這使得通過簡單地在渲染視圖時將不需要的組件留空即可清理複雜的表單。