DRYing up New and Edit forms using partial的最佳实践



这应该很容易,我是个傻瓜。

我有一个使用分部显示窗体的模型的新视图和编辑视图。对于编辑窗体,我想显示一个我不想在新窗体中显示的字段。

我应该将一个局部变量传递给分部,说明它处于编辑模式,并使用分部中的条件来显示字段吗?

在这种情况下,最好的做法是让部分人知道什么叫它?

这将只显示new表单的字段

<%# app/views/something/_form.html.erb %>
<% form_for something do |form| %>
  <%# common fields ... %>
  <% if something.new_record? %>
    <%= form.text_field :foo %>
  <% end %>
<% end %>

如果您想在edit窗体上使用它,只需将if切换到unless

如果使用form_for,则可以对newedit使用相同的模板。

form_for将检查对象是否持久化。如果是新记录,则操作url将指向#update,如果是持久化的,则将指向#create

所以,是的,当使用相同的"新建"one_answers"编辑"模板时,您的评论会起作用。当obj.new_record?时,它是一个编辑表单。

如果可能的话,尽量避免在您的视图中使用条件语句(并不总是可能的)

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

最新更新