如何为不同的请求建模不同类型的表单

Posted

技术标签:

【中文标题】如何为不同的请求建模不同类型的表单【英文标题】:How to model different types of forms for different requests 【发布时间】:2014-03-17 12:10:38 【问题描述】:

我很难找到适用于我情况的信息。我正在尝试为请求系统建模。用户可以提交一个请求,每个请求都有一组不同的字段。请求将是一种类型和一种子类型。每个请求类型都有一组特定于该类型的字段。另一组字段将特定于请求的子类型。这是一个例子:

请求 许可(请求类型) 允许常规字段(请求类型 = 允许) 许可证 1 许可证 2 许可证 3 管道(许可证子类型) 管道 1 管道 2 管道 3 电气(许可证子类型) 电气1 电气2 电气3 检查(请求类型) 检查常规字段(请求类型 = 检查) 检查1 检查2 检查3 建筑物(检查子类型) 1 号楼 2号楼 3号楼 占用(检查子类型) 入住人数 1 入住人数 2 入住人数 3

此外,当用户登录时,他们应该能够在列表中查看他们的所有请求。 我认为这排除了多态性

到目前为止,我已经考虑了以下内容

性病

根据我所阅读的内容,如果只有几个字段重叠,我不应该使用 STI,这里就是这种情况。调查问卷会因请求类型而有很大差异

多态性

我不认为我在寻找属于不同类型的问卷模型的请求模型或属于不同请求模型的问卷模型。如果我的理解是正确的,我将无法在列表中显示所有请求类型。

每个请求类型都是它自己的模型

这样做似乎不切实际,当用户想要查看他们的所有请求时,我将如何整合它们?就业申请、检查申请

带 Hstore 的 STI

我已经对我的代码进行了分支来尝试这一点。这似乎是一个不错的选择,但有一件事让我担心。如果我知道对于特定的请求类型,我将始终拥有相同的通用字段集,似乎我应该在表中使用已定义的列来存储这些通用字段。但是,如果我为每个请求类型在表中定义字段,我最终会在每条记录中得到很多空列,这不是好的 STI。

您对带有 Hstore 的 STI 有何看法?我有没有看过我所有的可能性?任何帮助,将不胜感激。提前感谢您的时间和反馈。

【问题讨论】:

【参考方案1】:

我正在做类似的事情。我发现surveyor gem目前不是最新的,有一段时间没有维护。

我的解决方案是: 用户创建新实例(请求) 问卷属于一个实例,有很多问题 答案属于一个实例和一个问题

这样,用户可以抽取任意数量的问卷,针对特定的请求类别开发特定的问卷。

实现不同类型子项的一个好方法是使用嵌套表单。查看茧宝石作为了解此问题的快速方法:https://github.com/nathanvda/cocoon。还有一个关于这个问题的 railscast,但它已经过时了。

【讨论】:

耶勒 - 感谢您的反馈。根据您的反馈,我已经排除了测量员选项。在走问答路线之前,我想看看是否还有其他选择。我还在帖子中添加了更多细节和示例。 嗨,您可以按照我的建议使用嵌套表单来执行此类操作。请参阅我的更新答案。 Jelle - 让我分支我的代码并尝试一下您的建议。谢谢。

以上是关于如何为不同的请求建模不同类型的表单的主要内容,如果未能解决你的问题,请参考以下文章

如何为端点上的不同请求设置单独的计数器指标?

如何为不同的请求方法创建具有不同参数编码的 AFHttpClient?

如何为带有可选 URL 参数的 GET 请求映射不同的 JSON 响应

如何为 kotlin 委托属性使用不同的类型

如何为不同类型的用户制作出价表结构

如何为具有不同类型键的对象编写 JSDoc?