2013-06-30 52 views
4

這應該是一個容易的,我是一個noob。乾燥新版和使用部分編輯表單的最佳做法

我有新的和編輯視圖的模型,使用部分顯示窗體。對於編輯表單,我想顯示一個我不想在新表單中顯示的字段。

我是否應該傳遞一個局部變量,說明它處於編輯模式下的部分,並使用partial中的條件來顯示該字段?

在這種情況下最好的做法是讓部分知道什麼行爲稱爲它?

+0

做了一些更多的研究,將使用 「new_record?」在部分是最好的辦法? – wiredin

回答

2

如果您使用的是form_for,則可以對newedit使用相同的模板。

form_for將檢查對象是否持久。如果它是新記錄,則動作網址將指向#update,如果它保留,它將指向#create

所以,是的,您的評論將適用於「新」和「編輯」使用相同的模板。當obj.new_record?,它是一個編輯窗體。

+0

謝謝!這就是我最終做的。 – wiredin

+1

看起來你已經扭轉了這兩個。如果obj.new_record?是真的,那麼它就是'new'形式,並且會指向'#create'。如果obj.persisted?是真的,那麼它就是'edit'形式,並且會指向'#update'。 –

6

如果你想要的edit形式,只需切換ifunless

1

如果可能的話儘量避免在您的視圖條件語句(沒有這隻會爲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 %> 
+0

好吧,所以這只是一個選項,如果你想字段顯示爲附加或在開始?在我的情況下,他們需要在部分內部的窗體中間的某個位置。 – wiredin

相關問題