在Rails中的同一页面上添加和编辑表单

时间:2012-12-12 22:47:52

标签: ruby-on-rails multiple-forms

我希望在同一页面上为模型添加“添加”和“编辑”表单。您可以在此屏幕截图中看到我正在使用JS显示和隐藏2个表单:

Add and Edit Forms

在编辑表单中,用户选择一个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

我欢迎你的指导。 :)

2 个答案:

答案 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 %>