【问题标题】:Using ActiveRecord to achieve complex relations in Rails在 Rails 中使用 ActiveRecord 实现复杂关系
【发布时间】:2015-02-05 05:09:08
【问题描述】:

来自我的another question

我需要实现的是:使用它们创建多个类别 自己指定的信息字段(即汽车有不同的字段 宠物),一旦创建了这样的类别,我需要的命令将是 调用并为每个类别制作一个新表。我知道我可以 将所有字段存储为某种字符串,然后对其进行处理以显示 它正确,但我需要为我的网络应用程序提供高级搜索功能,并且 为每个类别创建单独的表似乎是最好的方法 实现这一目标。我真的很想听听这个的替代方案

所以我遇到这种情况,我需要类别来保存该特定类别所需的所有输入字段。所以在管理中,我有这个表格,我可以在其中添加类别名称、一些其他相关信息到类别本身,然后这些字段将收集有关 HTML 字段 的信息在进入该特定类别时呈现给用户。

例如,这将是一个 Dog 类别:

  • 类别名称:狗
  • 已启用类别:1
  • 父类:宠物
  • 字段:
    • 标题 - 文本字段(将自动添加到每个类别)
    • 品种 - 选择字段
    • 年龄 - 数字字段
    • 颜色 - 文本字段
    • 价格 - 数字字段(将自动添加到每个类别)
    • 说明 - 文本区域字段(将自动添加到每个类别)

所以现在在这个阶段,当用户为 Dog 类别创建所有这些特定字段时,我无法弄清楚当用户点击提交按钮以保存此类别时会发生什么。我想到了这两种解决方案:

  • 为每个新类别创建一个新模型/表(阅读上面的链接问题),将所有 HTML 字段作为列,并在 categories 表上存储一行,其中包含有关此类别的一些基本信息
  • 将所有内容存储在categories 表中,并有一个fields_json 列,该列将存储所有HTML 字段信息(我实际上不会存储HTML,而是这些字段的基本信息,然后在a 中动态创建HTML 表单字段控制器)作为 JSON 字符串。我可以在 create 上很好地呈现这些字段,但在 update 上填充这些字段(可能)会很麻烦,并且使用这种替代方法搜索功能不会很有效。

所以我正在寻找第三种选择,以便我可以解决我的问题。什么是解决此问题的有效方法,并且能够拥有具有不同输入字段的类别,并且还能够有效地对这些类别执行搜索?

我正在处理的项目是在 Ruby on Rails 4 中创建的,数据库在 MySQL 中。

【问题讨论】:

  • 你能切换到 Postgres 吗?它有一个 JSON 类型,您可以使用它来有效地查询动态属性。 Rails 将正确处理这种类型,因此您只需使用哈希。
  • 我以前从未使用过 Postgres,所以我对使用它没有信心。
  • 它的基本功能和mysql没有太大区别。恕我直言,这将是完成这项工作的正确工具。
  • 你能举个例子吗?
  • 是的,会的。因为我在我的手机上,所以不能事先做......

标签: mysql ruby-on-rails search ruby-on-rails-4 rails-activerecord


【解决方案1】:

对于给定的场景,我会:

  1. 创建表categories来存储每个类别
  2. 创建表category_fields来存储每个类别字段
  3. 创建表 collected_categories 以将所有从类别字段收集的数据存储在序列化哈希中

收集的数据可以轻松(反)序列化为文本列(无论您将使用哪种数据库引擎)。

检查那些利用您的问题的来源:dynamic forms

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多