动态创建表单轨道

时间:2013-11-07 05:25:34

标签: javascript ruby-on-rails

我在页面上有几个按钮,根据单击的按钮,我想显示一个具有特定表单的模态视图。

我的想法:1)我可以为每个按钮生成一个模态表单。但是我可能会有很多按钮,所以这会很快变得低效。 2)我可以通过javascript按下按钮后创建表单。铁轨有可能吗?我想使用form_tag并根据单击的按钮传入对象或它的id。

谢谢!

2 个答案:

答案 0 :(得分:5)

首先将每个表单视图放在不同的部分(_form1.html.erb,_form2.html.erb,_form3.html.erb)中。 使视图中的每个按钮向控制器发送一个不显眼的(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%>

答案 1 :(得分:0)

您必须向按钮单击上的某个操作发送远程请求,其中您将值决定模态视图作为注释传递,并使用远程js渲染模态内的相应视图