Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在ActiveRecord模型的属性中存储数组?_Mysql_Sql_Ruby On Rails_Activerecord_Many To Many - Fatal编程技术网

Mysql 如何在ActiveRecord模型的属性中存储数组?

Mysql 如何在ActiveRecord模型的属性中存储数组?,mysql,sql,ruby-on-rails,activerecord,many-to-many,Mysql,Sql,Ruby On Rails,Activerecord,Many To Many,我有一个带有两个属性的模型航路点 坐标 地理编码文本 模型路线,只不过是带有一些附加文本信息的已排序航路点数组。有些路线可以有相同的航路点,所以我想将航路点与路线分开 在路线内存储航路点的最佳方式是什么 我认为有几种方法: 将航路点ID序列化为route的waypoint\u id属性,但在这种情况下,我将无法在一个SQL请求中获取航路和他的所有航路点,因为航路点ID将隐藏在序列化字符串中 创建具有此类参数的第三个模型 路线号 航路点标识 位置 连接具有多对多关联的路线和航路点,并将航路点在路

我有一个带有两个属性的模型
航路点

  • 坐标
  • 地理编码文本
  • 模型
    路线
    ,只不过是带有一些附加文本信息的已排序航路点数组。有些路线可以有相同的航路点,所以我想将航路点与路线分开

    在路线内存储航路点的最佳方式是什么

    我认为有几种方法:

    • 将航路点ID序列化为
      route
      waypoint\u id
      属性,但在这种情况下,我将无法在一个SQL请求中获取航路和他的所有航路点,因为航路点ID将隐藏在序列化字符串中
    • 创建具有此类参数的第三个模型

    • 路线号
    • 航路点标识
    • 位置
    • 连接具有多对多关联的路线和航路点,并将航路点在路线中的位置存储在
      位置
      属性中。但这似乎过于复杂了


    在这种情况下,对我来说最好的方法是什么?

    这几种方法在你的情况下都是可行的。因此,为了帮助您,我只想告诉您序列化的优点和缺点。那你就可以做出选择了

    • 首先,我是刚毕业的学生,我被教导不要打破传统。如果 如果选择序列化,则必须忘记使用SQL聚合 其上的功能(最小值、最大值、平均值)
    • 如果两个模型之间存在大量关联,序列化可能会使读/写操作比多对多关联慢。此外,您还必须考虑您愿意更新这些数据的频率
    就个人而言,我只会在处理应用程序中较小组件(用户设置等)的情况下使用序列化,并且您不想大量读取/写入其信息。这里的路线和航路点似乎是安静的核心


    希望能有帮助

    我会选择第二个选项——使用连接表(RouteWaypoints)和类似于acts_as_列表的内容,这样您就可以在正确排序所有航路点的情况下检索路线。这一点也不过分——DB在这方面真的很在行。

    您的数据模型适合通过activerecord建立许多关系。这是最好的方法,因为它使您能够灵活地存储大量附加数据,并执行索引和构造sql查询

    Route.include(:way\u points)
    将在定义关系后加载给定路线及其航路点


    在加入模型中,您可以保存排序顺序、附加信息以及到路线和路线点的链接,而无需更改任何一种模型。

    不幸的是,acts as\u list有缺陷,即使有许多关联,也无法正常工作: