gpt4 book ai didi

ruby-on-rails - Rails - 我应该使用哪种数据类型将数组存储在数据库中

转载 作者:搜寻专家 更新时间:2023-10-30 22:12:49 26 4
gpt4 key购买 nike

我收到了一个 GET api 调用返回的响应,它在我的数据库中按 1:1 映射。响应看起来像这样:

response =     {
"status": "live",
"templates": {},
"responses": 0,
"creator": "Marketing",
"publish_url": "https://fluidsurveys.com/account/surveys/403975/publish/",
"quota_start_date": null,
"updated_at": "2014-01-18T16:05:20",
"online_url": "http://fluidsurveys.com/surveys/marketing/tampa-bob-gilbertson-3084-nme-survey-emai/",
"deploy_uri": "http://fluidsurveys.com/surveys/marketing/tampa-bob-gilbertson-3084-nme-survey-emai/",
"settings_url": "https://fluidsurveys.com/account/surveys/403975/settings/",
"groups": [],
"quota_end_date": null,
"offline_url": "http://fluidsurveys.com/surveys/marketing/tampa-bob-gilbertson-3084-nme-survey-emai/offline/",
"responses_url": "https://fluidsurveys.com/account/surveys/403975/responses/",
"style_url": "https://fluidsurveys.com/account/surveys/403975/theme/",
"id": 403975,
"upgrade_url": "https://fluidsurveys.com/account/surveys/403975/upgrade-version/",
"name": "Bob Gilbertson 3084453 NME Survey Emai",
"uri": "https://fluidsurveys.com/api/v2/surveys/403975/",
"invites_url": "https://fluidsurveys.com/account/surveys/403975/publish/invites/",
"created_at": "2014-01-17T21:47:52",
"tags": [
"austin",
"nme"
],
"preview_url": "http://fluidsurveys.com/surveys/marketing/tampa-bob-gilbertson-3084-nme-survey-emai/?TEST_DATA=",
"report_url": "https://fluidsurveys.com/account/surveys/403975/reports/",
"version": 4.0,
"updated_at_text": "10:05 am",
"edit_url": "https://fluidsurveys.com/account/surveys/403975/edit/"
}

如您所见,我在此响应中返回了一些数组。例如,我想将 response["tags"] 存储在我的 Survey 模型的数据库中。

但是,当我尝试这样做时,出现错误:

类型错误(无法将数组转换为字符串):

我该如何解决这个问题?我应该将数据类型从 string 更改为其他类型,还是我需要做其他事情以允许将数组存储在数据库中?此外,作为奖励,将数组存储在数据库中是一种不好的做法吗?

最佳答案

这里有几个选项:

  1. 因为我们正在处理的是标签,所以您可以将它们存储为逗号分隔值,同时仍然有一个基于String 的列:

    person.tags = response['tags'].join(',') # Stores "austin,nme"
  2. 如果您希望能够查询单个标签(并为它们编制索引),单独存储标签可能是一个不错的选择。为此,您需要创建一个模型 Tag,它与您的 Person 类具有多对多关系。

  3. 最后,您可以将数组序列化为 YAML 并将其作为字符串存储在数据库中:

    # When storing
    person.tags = YAML::dump(response['tags'])

    # When fetching from the database
    tags = YAML::load(person.tags)

    您可以通过将此逻辑移至模型访问器 来简化您的工作。假设您将标签置于 Person 模型下:

    class Person
    def tags=(value)
    self.tags = YAML::dump(value)
    end

    def tags
    YAML::load(super)
    end
    end

编辑:我最喜欢的方法是第二种方法,这主要是因为我喜欢保持数据库的整洁和结构化。在数据库中存储文档(数组、json、blob 等)并不是什么坏习惯,只要您知道自己在做什么以及为什么要这样做。查看整个 NoSQL结构化数据库 的辩论。我建议的第一个选项可能会满足您的需求,而不会增加复杂性。

关于ruby-on-rails - Rails - 我应该使用哪种数据类型将数组存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21211346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com