我该如何创建这个动态表单?

时间:2011-03-18 11:52:06

标签: ruby-on-rails forms

想象一下3个选项的下拉列表:A,B,C和ID为myform的div。 当用户从列表中选择一个选项时,div的内容应该由与该选项对应的表单替换。问题是,形式没有任何共同之处。

我正在考虑以下列方式解决这个问题:

  • 创建新控制器FormCreator
  • 创建一个新动作build_form,它将一个类型作为参数(A / B / C)
  • 创建A.html.erbB.html.erbC.html.erb
  • 根据类型,我将渲染A / B / C,禁用布局渲染
  • 使用ajax将div的内容替换为控制器生成的内容

有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

这是我如何做的指导:当选择某个选项时,例如A,使用AJAX GET AController#new作为JSON并返回由erb呈现的表单。比$('#myForm')。html(withResponse)。主要的想法是,在select.change事件中,您点击了正确的资源控制器新操作,并用它的响应替换div内容。

不完整的答案,但我希望它会给你一个想法

答案 1 :(得分:0)

为什么不隐藏表格并在选择列表选择时显示/隐藏它们?您从哪个控制器或操作呈现表单/选择列表无关紧要,但它们应该发布到自己的控制器并在验证失败时仅呈现先前发布的表单。

答案 2 :(得分:0)

使用javascript select来调用你的AJAX控制器:onchange => remote_function(...)

在你的控制器中=>

def FormCreator
  if params[:form] == 1
    render :update do |page|
      page.replace_html 'form_div', :partial => 'form_1'
      #make a file with just the form called _form_1.erb, this is called a partial 
      #because the file name starts with '_'
      #form_div is the id of the div that holds all 3 forms.
    end
  end
  #repeat for all forms
end