这应该是一个简单的,我是一个菜鸟。
我为使用partial显示表单的模型创建了新视图和编辑视图。对于编辑表单,我想显示一个我不想在新表单中显示的字段。
我应该传递一个局部变量,将其在编辑模式下的状态传递给partial,并使用partial中的条件来显示该字段吗?
在这种情况下最好的做法是让部分知道什么动作叫它吗?
答案 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
,则可以对new
和edit
使用相同的模板。
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 %>