使用ActiveRecord在Rails中实现复杂的关系

时间:2014-12-07 13:02:34

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

来自我的another question

  

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

的替代方案

所以我遇到这种情况,我需要类别来保存该特定类别所需的所有输入字段。因此,在管理中,我可以使用此表单,我可以将类别名称,其他一些相关信息添加到类别本身,然后这些字段可以收集有关 HTML字段<的信息/ strong>在输入此特定类别时向用户显示。

例如,这将是一个狗类:

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

对于给定的情况,我会:

  1. 创建表格类别以存储每个类别
  2. 创建表 category_fields 以存储每个类别字段
  3. 创建表 gather_categories 以存储序列化哈希中类别字段中的所有收集数据
  4. 收集的数据可以轻松(反)序列化为文本列(无论您使用的是哪种数据库引擎)。

    检查使用您问题的来源:dynamic forms