这应该很容易,我是菜鸟。
我有一个模型的新视图和编辑视图,它使用部分来显示表单。对于编辑表单,我想显示一个我不想在新表单中显示的字段。
我是否应该将一个局部变量声明其处于编辑模式,并在部分中使用条件来显示该字段?
在这种情况下,让部分知道什么动作的最佳做法是什么?
这应该很容易,我是菜鸟。
我有一个模型的新视图和编辑视图,它使用部分来显示表单。对于编辑表单,我想显示一个我不想在新表单中显示的字段。
我是否应该将一个局部变量声明其处于编辑模式,并在部分中使用条件来显示该字段?
在这种情况下,让部分知道什么动作的最佳做法是什么?
这将只显示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
,则可以为new
和使用相同的模板edit
。
form_for
将检查对象是否被持久化。如果是新记录,则 action url 指向#update
,如果是持久化,则指向#create
.
所以,是的,当对“新建”和“编辑”使用相同的模板时,您的评论将起作用。当 时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 %>