這應該是一個容易的,我是一個noob。乾燥新版和使用部分編輯表單的最佳做法
我有新的和編輯視圖的模型,使用部分顯示窗體。對於編輯表單,我想顯示一個我不想在新表單中顯示的字段。
我是否應該傳遞一個局部變量,說明它處於編輯模式下的部分,並使用partial中的條件來顯示該字段?
在這種情況下最好的做法是讓部分知道什麼行爲稱爲它?
這應該是一個容易的,我是一個noob。乾燥新版和使用部分編輯表單的最佳做法
我有新的和編輯視圖的模型,使用部分顯示窗體。對於編輯表單,我想顯示一個我不想在新表單中顯示的字段。
我是否應該傳遞一個局部變量,說明它處於編輯模式下的部分,並使用partial中的條件來顯示該字段?
在這種情況下最好的做法是讓部分知道什麼行爲稱爲它?
如果您使用的是form_for
,則可以對new
和edit
使用相同的模板。
form_for
將檢查對象是否持久。如果它是新記錄,則動作網址將指向#update
,如果它保留,它將指向#create
。
所以,是的,您的評論將適用於「新」和「編輯」使用相同的模板。當obj.new_record?
,它是一個編輯窗體。
謝謝!這就是我最終做的。 – wiredin
看起來你已經扭轉了這兩個。如果obj.new_record?是真的,那麼它就是'new'形式,並且會指向'#create'。如果obj.persisted?是真的,那麼它就是'edit'形式,並且會指向'#update'。 –
如果你想要的edit
形式,只需切換if
到unless
如果可能的話儘量避免在您的視圖條件語句(沒有這隻會爲new
形式
<%# app/views/something/_form.html.erb %>
<% form_for something do |form| %>
<%# common fields ... %>
<% if something.new_record? %>
<%= form.text_field :foo %>
<% end %>
<% end %>
顯示的字段總是可能的)
_form.html.erb
# common fields only
# ...
_new.html.erb
<%= form_for @your_model do |f| %>
<fieldset>
<% # render _form partial %>
</fieldset>
<div>
<%= f.submit "Create New XXXX" %>
</div>
<% end %>
_edit.html.erb
<%= form_for @your_model do |f| %>
<fieldset>
<% # render _form partial %>
<% # render fields that only appear for edit %>
</fieldset>
<div>
<%= f.submit "Save Changes" %>
<%= link_to 'Cancel', xxxx_path %>
</div>
<% end %>
好吧,所以這只是一個選項,如果你想字段顯示爲附加或在開始?在我的情況下,他們需要在部分內部的窗體中間的某個位置。 – wiredin
做了一些更多的研究,將使用 「new_record?」在部分是最好的辦法? – wiredin