1

モデルの追加フォームと編集フォームを同じページに配置したいと考えています。このスクリーンショットで、JS を使用して 2 つのフォームを表示および非表示にしていることがわかります。

フォームの追加と編集

編集フォームで、ユーザーが航空機 ID を選択すると、他のデータに Ajax が入力されます。

現在、次のようにパーシャルから 2 つのフォームをレンダリングしています。

<!-- 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

ご指導よろしくお願いします。:)

4

2 に答える 2

4

DRY なら、locals を使うのはどうでしょうか。

<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 に答える