我有一个表单需要能够与5个(可能更多)模型进行交互。它是以下内容:
患者 - 需要创建患者记录和详细信息(姓名,地址等) 表格 - 跟踪表格名称和版本 问题 - 跟踪每个表格附带的问题 答案 - 患者给出的问题的答案 表格回复 - 跟踪填写表格的患者及其形式。
我已经创建了模型的布局以及我认为数据的样子: Google Doc - DB Layout
在表单响应中,completed_by poly关系考虑到用户,第三方或患者可以填写表单
我坚持通过一种形式完成所有这一切的最佳方式。现在我正在通过患者控制器和患者/新视图,因为我认为这一切都与患者有关。我只是不确定如何在表单本身(form_for,form_tag,fields_or?)中完成所有这些嵌套,然后在控制器的create动作中处理它。即使经过一堆轨道电视等,我仍然非常困难。任何见解都会非常感激。
答案 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
同样,您可以执行此操作来存储响应。我希望你现在对它有点清楚