4

这应该很容易,我是菜鸟。

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

我是否应该将一个局部变量声明其处于编辑模式,并在部分中使用条件来显示该字段?

在这种情况下,让部分知道什么动作的最佳做​​法是什么?

4

3 回答 3

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表格上,只需切换ifunless

于 2013-06-30T04:31:25.580 回答
2

如果您正在使用form_for,则可以为new和使用相同的模板edit

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

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

于 2013-06-30T04:27:53.803 回答
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 %>  
于 2013-06-30T14:59:43.093 回答