Rails动态&可修改的表单模式

时间:2016-03-16 06:27:00

标签: ruby-on-rails ruby-on-rails-4

我的表单有问题。我正在开发一个允许申请人提交申请的应用程序,我想确保用户(接收这些应用程序的人)可以在他们的应用程序中添加/删除问题。我该如何实现呢?

我的想法是拥有Application模型和ApplicationQuestion模型belongs_to应用程序。但是我已经迷失了。

更新: 另一个问题让我感到困惑。在我的系统中,我可以让Admins动态添加/删除ApplicationQuestions,我没有遇到任何问题。但是,我希望用户能够查看当前的ApplicationQuestions集并回答它们,而无法添加/删除/编辑问题。我现在正在使用代理模型ApplicationQuestionAnswer,它属于Application和ApplciationQuestion。但是我仍然对这些观点有困难。

2 个答案:

答案 0 :(得分:0)

是的,您可以按照自己的想法保留模型。将会有User模型基本上有两个角色。一个是teacher(只是举个例子)问问题,一个是student谁会回答这些问题。现在,teacher可以创建application questionsApplication,以便另外两个模型ApplicationQuestionApplication belongs_to User ApplicationQuestion belongs to Application 。关系可以是:

student

现在,answer将回答可以存储在ApplicationQuestionAnswer表中的问题,这些问题可能属于UserApplicationQuestion的另一个模型question_type }。现在问题可以是不同的类型(数字,字符串,日期等),所以要注意这一点,它们都可以通过在代码端处理它们而存储在一个列中,并且这也有ApplicationQuestion属性在teacher模型中。

现在application可以修改question并删除问题,如果他们想要或添加新问题。请务必添加依赖销毁,以便在删除问题时删除答案。另外假设choices可以ApplicationQuestionChoice,那么请确保再添加一个属于ApplicationQuestion的{​​{1}}模型id,其answer将保存为student ApplicationQuestionAnswer的{​​{1}}。

<强>更新

question模型将保存每个ApplicationAnswer的答案,而您可以做的是有两个模型。一个是ApplicationQuestionAnswer,另一个是ApplicationAnswer belongs_to User ApplicationAnswer belongs_to Application ApplicationQuestionAnswer belongs_to ApplicationAnswer 。协会将是:

form

现在,在视图中,ApplicationAnswer将用于创建/更新nested forms,并为其关联的ApplicationQuestionAnswer提供teacher,您将向学生展示。这将保存所有答案。

同样的嵌套表单也可以与css一起使用来添加或删除问题。您也可以将任何gem用于嵌套表单:

希望这有帮助。

答案 1 :(得分:0)

  

我实际上更关注这些观点。我该怎么渲染   表格形式填料?

从包含稳定数量Application的{​​{1}}表单开始(请参阅Rails nested forms以实现它)。基本实现可能如下:

Questions

动态添加和删除问题可以通过添加(和删除)上面显示的<%= form_for @application do |f| %> <%= f.fields_for :application_questions do |aq_form| %> <%= aq_form.text_field :question %> <%= aq_form.text_field :question %> 帮助生成的HTML块来实现:

Rails

你可以自己深入研究它的实现(并编写一些<%= aq_form.text_field :question %> 来编排javascript块添加/删除)或者使用一些具有该功能的gem。其中一种流行的解决方案是cocoon。它为您提供了漂亮的链接(HTMLlink_to_add_association),点击它们可以执行所需的动态操作。您可能有兴趣尝试cocoon demo application来了解如何将其嵌入到您的项目中。