使用partial来干燥New和Edit表单的最佳实践

时间:2013-06-30 01:38:50

标签: ruby-on-rails ruby-on-rails-3

这应该是一个简单的,我是一个菜鸟。

我为使用partial显示表单的模型创建了新视图和编辑视图。对于编辑表单,我想显示一个我不想在新表单中显示的字段。

我应该传递一个局部变量,将其在编辑模式下的状态传递给partial,并使用partial中的条件来显示该字段吗?

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

3 个答案:

答案 0 :(得分:6)

这只会显示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

答案 1 :(得分:2)

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

form_for将检查对象是否持久化。如果是新记录,则操作网址将指向#update,如果该记录持续存在,则会指向#create

所以,是的,当您使用相同模板进行“新建”和“编辑”时,您的评论会有效。 obj.new_record?时,它是一个编辑表单。

答案 2 :(得分:1)

如果可能,请尝试避免视图中的条件(并非总是可行)

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