【问题标题】:Interacting with 5 models in a rails form以导轨形式与 5 个模型交互
【发布时间】:2013-11-29 21:23:17
【问题描述】:

我的表单需要能够与 5 个(可能更多)模型进行交互。如下:

患者 - 需要创建患者记录和详细信息(姓名、地址等)。
表单 - 跟踪表单名称和版本。
问题 - 跟踪每个表单所附的问题。
答案 - 患者给出的问题的答案。
表格回复 - 跟踪填写表格的患者,以及它是什么表格。

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

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

我被困在通过一种表格完成所有这些工作的最佳方式上。现在我正在浏览患者控制器和患者/新视图,因为我认为这一切都与患者有关。我只是不确定如何在表单本身(form_for、form_tag、fields_or?)中进行所有这些嵌套,然后在控制器的创建操作中处理这些嵌套。即使在经历了一堆 railscasts 等之后,我仍然非常卡住。任何见解将不胜感激。

【问题讨论】:

  • 你能更详细地描述每个模型之间的关系吗?
  • @jason328 抱歉含糊不清。我添加了一个文档来显示我正在考虑的结构。非常感谢任何帮助。

标签: ruby-on-rails forms activerecord models


【解决方案1】:

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

患者、表格、问题、答案、表格响应

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

模型结构应该是

 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" />

注意 - 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

同样,您可以这样做来存储响应。我希望它现在对你来说有点清楚了

【讨论】:

  • 感谢您的帮助。所以在表格中我看到有一个form_for @patient,然后你会做一个fields_for问题和答案吗?我真的很困惑如何将这两个东西嵌套在表单本身中。
  • 好吧,如果答案只是用户输入的答案,那么您在表单编辑中就不需要它了。我提到的 应该在表单内部,以便它的值进入表单操作。您所要做的就是阅读它们并相应地存储。我认为您对用例感到困惑。写下你想要的所有操作是个好主意,然后你就可以弄清楚如何在那里存储值
  • 另外,最好通过右键单击浏览器 (chrome) 并检查源来查看表单元素的外观。它比 Rails 更多的是 HTML 内容:)
  • 如果您需要控制器操作,我可以为您编写一个完整的示例表单
  • 那真的很有帮助。我越想这个,我就越想把病人分成自己的形式是否更好。因此,患者将输入他们的详细信息,然后点击“提交”,这会将他们带到 forms_controller 新操作,其中将处理表单、问题和答案。当需要编辑这些表单时,我可以看到它是一团糟。从 UI 的角度来看,它可能不那么流畅,但从编码方面来看,我可以看到这种方式要好得多。你怎么看?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多