我希望在同一页面上为模型添加“添加”和“编辑”表单。您可以在此屏幕截图中看到我正在使用JS显示和隐藏2个表单:
在编辑表单中,用户选择一个Aircraft ID,并用一些Ajax填充其他数据。
目前,我正在从这样的部分渲染这两种形式:
<!-- Add Aircraft -->
<div id="aircraftmodal-add-content">
<%= render 'aircrafts/new' %>
</div>
<!-- Edit Aircraft -->
<div id="aircraftmodal-edit-content">
<%= render 'aircrafts/edit' %>
</div>
我的表单呈现几乎相同的内容,我通过给编辑表单提供不同的ID来攻击它:
<!-- Add Partial --->
<%= form_for @aircraft, validate: true, remote:true do |air| %>
<!-- Edit Partial -->
<%= form_for @aircraft, :html => { id:'edit_aircraft'}, validate: true, remote:true do |air| %>
当我将2个表单放在同一页面上时,我可以以某种方式使用内置的Rails优点来处理编辑吗?我是否必须将“编辑”表单指向不同的操作,或者通常的代码是否可以处理这两种操作?
def create
@aircraft = current_user.aircrafts.build(params[:aircraft])
@aircraft.save
end
我欢迎你的指导。 :)
答案 0 :(得分:4)
如果你关于DRY,那么使用当地人呢?
<div id="aircraftmodal-add-content">
<%= render 'aircrafts/form', :dom_id => "new_aircraft" %>
</div>
<!-- Edit Aircraft -->
<div id="aircraftmodal-edit-content">
<%= render 'aircrafts/form', :dom_id => "edit_aircraft" %>
</div>
<!-- Form Partial -->
<%= form_for @aircraft, :html => { id: dom_id }, validate: true, remote:true do |air| %>
<% if dom_id == "edit_aircraft" %>
<%= ... select aircraft id ... %>
<% elsif dom_id == "new_aircraft" %>
<%= ... input aircraft id ... %>
<% end %>
etc...
答案 1 :(得分:1)
您可以使用@aircraft.persisted?
来了解飞机是否有新注册(新/创建操作)或者是否已经保留(编辑/更新操作)。
使用相同的表单,你不需要指定id,Rails已经指定了不同的id'new_aircraft'和'edit_aircraft_X',其中X是飞机ID。:
要更改可以使用的select / input_text:
<% if @aircraft.persisted? %>
<%= select... %>
<% else %>
<%= input... %>
<% end %>