まず、各フォーム ビューを別のパーシャル (_form1.html.erb、_form2.html.erb、_form3.html.erb) に配置します。ビューから各ボタンを作成し、レンダリングするフォームのパラメーターを使用してコントローラーにUnobtrusive ( http://railscasts.com/episodes/205-unobtrusive-javascript ) リクエストを送信します。次に、.js.erb ファイルで、ボタンから送信されたパラメーターに応じてレンダリングされるフォームを決定し、このフォームをモーダルに追加します。
my_view.html.erb
<%= link_to "Render Form1", my_controller_my_method_path(:form => "_form1",:object_type => "Object1",:object_id => '100'),:remote => true %>
<%= link_to "Render Form2", my_controller_my_method_path(:form => "_form2",:object_type => "Object2",:object_id => '144'),:remote => true %>
<%= link_to "Render Form2", my_controller_my_method_path(:form => "_form3",:object_type => "Object3",:object_id => '160'), :remote => true %>
<div id="#my_modal"></div>
my_controller.rb
def my_method
@form_partial=params[:form]
@object=params[:object_type].constantize.find(params[:object_id])
respond_to do |format|
format.js{render :action=>:my_method}
end
end
my_method.js.erb
$('#my_modal').html("<%= j render :partial => @form_partial %>");
_form1.html.erb
<%= form_tag @object do |form| =>
<%= form.input :name%>
<%end%>