Rails 请问如何动态的生成表单?

bydmm · 2013年08月08日 · 最后由 doitian 回复于 2013年08月09日 · 4005 次阅读

很多问卷调查的网站都可以让人自定义问卷,添加多选题/单选题/填空题,最后生成一个表单。

我大概的知道实现这种功能的方法,但是感觉实现起来很复杂。

我不是想直接拿到一个直接实现了问卷调查的 GEM, 而是想知道如何更好的实现此类动态表单。 谢谢。

#app/models/exam.rb
class Exam < ActiveRecord::Base

  has_many :raw_questions #将各种类型的问题和试卷关联起来

  def questions
    @questions = [];
    self.raw_questions.each do |raw_questions|
      #利用强大的ruby元编程能力,将raw_questions的type字段转换为对应类型的Model
      question = raw_questions.type.camelize.constantize
      question.find(raw_questions.id) #找到并实例化相应的问题。
      @questions.push(question)
    end
    return @questions 
  end

end

感谢@bhuztez 质疑了我一下。 我思索了一下,感觉用 ruby 的元编程方法似乎不错。

怎么就复杂了

我觉得这个问题可以在具体一点,那就是你期望的特效是那种类型的。比如你期望

  1. 动态拖拽在前端先 Render 出来呢,
  2. 还是给出一个字段表单让用户先择的组件后在后端 render。

接下来,我的问题是,你是希望完全用 Ruby 技术来解决它,还是可以 mashup 其他技术。 建议多考虑一下你的问题,问问 Google,基本上你会有一个大概的答案。

#2 楼 @Levan 楼主说的是动态字段的表单,比如调查问卷,跟 Nested Modle Form 关系不大。

https://encrypted.google.com/search?hl=en&q=railscast+dynamic+form

虽然是 pro 的,不过有 github 的源代码可以参考

需要 登录 后方可回复, 如果你还没有账号请 注册新账号