1

我想在同一页面上为模型添加和编辑表单。您可以在此屏幕截图中看到我正在使用 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>

我的表单呈现几乎相同的内容,我通过为 Edit 表单提供不同的 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

欢迎您的指导。:)

4

2 回答 2

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...
于 2012-12-12T23:03:46.663 回答
1

您可以使用@aircraft.persisted?来了解飞机是新注册(新/创建操作)还是已经持久化(编辑/更新操作)。

使用相同的形式,您不需要指定 id,Rails 已经分配了不同的 id 'new_aircraft' 和 'edit_aircraft_X',其中 X 是飞机 id:

要更改 select/input_text 您可以使用:

<% if @aircraft.persisted? %>
  <%= select... %>
<% else %>
  <%= input... %>
<% end %>
于 2012-12-12T23:22:47.830 回答