以轨道形式与5个模型交互

时间:2013-11-29 21:23:18

标签: ruby-on-rails forms activerecord models

我有一个表单需要能够与5个(可能更多)模型进行交互。它是以下内容:

患者 - 需要创建患者记录和详细信息(姓名,地址等) 表格 - 跟踪表格名称和版本 问题 - 跟踪每个表格附带的问题 答案 - 患者给出的问题的答案 表格回复 - 跟踪填写表格的患者及其形式。

我已经创建了模型的布局以及我认为数据的样子: Google Doc - DB Layout

在表单响应中,completed_by poly关系考虑到用户,第三方或患者可以填写表单

我坚持通过一种形式完成所有这一切的最佳方式。现在我正在通过患者控制器和患者/新视图,因为我认为这一切都与患者有关。我只是不确定如何在表单本身(form_for,form_tag,fields_or?)中完成所有这些嵌套,然后在控制器的create动作中处理它。即使经过一堆轨道电视等,我仍然非常困难。任何见解都会非常感激。

1 个答案:

答案 0 :(得分:1)

这是我能从这个问题中理解的。将有五个模型

患者,表格,问题,答案,表格回应

现在,表格会有很多问题。一个问题将有很多答案。 Formresponse会有很多答案。

模型结构应该是

 class Patient < ActiveRecord::Base
  has_many :formresponses
 end

 class Form < ActiveRecord::Base
  has_many :questions
  has_many :formresponses
 end

 class Question < ActiveRecord::Base
  belongs_to :form
  has_many :answers
 end

 class Answer < ActiveRecord::Base
  belongs_to :question
 end

 class Formresponse < ActiveRecord::Base
  belongs_to :form
  belongs_to :patient
 end

现在您将有一个用于创建/编辑患者信息的表单,这应该是直截了当的,因为没有嵌套。

表单的创建将非常棘手。存储类Form的属性将非常简单。要存储类Question的属性,您需要在控制器中处理它们。创建表单元素,使名称绑定到“问题”

例如,

 <input type="text" name="questions[0][name]" value="some name" />
 <input type="text" name="questions[0][help_text]" value="some help text" />

note - name和help_text是模型问题的属性

现在在控制器中,您可以遍历params [:questions]的每个值以获得形状值。

所以,它会是这样的

 params[:questions].each do |question|
   q = Question.new(question)
   @form.questions << q #This will append the question to your @form instance
 end
 ...
 @form.save

同样,您可以执行此操作来存储响应。我希望你现在对它有点清楚