【问题标题】:How to iterate through array of strings from database Ruby on Rails如何遍历数据库 Ruby on Rails 中的字符串数组
【发布时间】:2018-02-11 20:32:51
【问题描述】:

我将一个字符串数组保存到我的 rails 数据库中,但是当我在视图中使用它时,我相信它正在打印数组的字符串定义。我在这里处理 JSON 吗? (又名当它保存到数据库时,它只是一个包裹在字符串中的数组吗?)

我如何拥有它以便在我看来,它只是显示项目?

<%= record.items %>

显示在我的 html 标签内:

["item1", "item2", "item3"]

我尝试遍历record.items.each do |item|,但没有成功。

【问题讨论】:

  • &lt;%= record.items.class %&gt; 返回什么,object.each 目前看到了什么?
  • 字符串。我将字符串数组保存到我的数据库中,因此列类型为字符串。我认为这是将字符串数组保存到数据库的正确方法?
  • “正确的方法”取决于您使用的数据库。 PostgreSQL 本身支持数组,所以你可以创建一个 text[] 列,一切都会正常工作,其他关系数据库可能希望你使用 serialize 将一堆 YAML 塞进一个文本列。

标签: ruby-on-rails arrays json


【解决方案1】:

如果您将“精确”数组保存为字符串,那么 Array#each 将不起作用,因为它不是 String 类中的方法。

也许不是最好的选择,但您可以使用 JSON.parse 并通过这种方式获取您的数组并能够遍历其中的每个对象:

require 'json'

str = '["item1", "item2", "item3"]'
JSON.parse(str).each { |item| p item }
# "item1"
# "item2"
# "item3"

为了完成这项工作,您的字符串必须是一个数组,在您的示例中,第二项缺少双引号。

您可以考虑使用序列化或数组数据类型,具体取决于您当前的数据库。

【讨论】:

  • 你应该把require 'json'这一行放在哪里?
  • 如果使用 Rails,您不需要它,请尝试不使用它。
  • 你确定那是 JSON 吗?在我看来更像some_array.inspect 的输出,建议使用serialize 或数据库中的数组列,而不是手动处理字符串。
  • 我是吗?我不知道,如果是在数组中进行检查的结果,那么它看起来更像"[\"item1\", \"item2\", \"item3\"]"。除了帮助我想我做不到之外,我还提到了一些要记住的提示。
【解决方案2】:

解决您的问题的更好方法是serialize 您的项目列。我认为默认情况下它是 Array,但您可以使用 Hash 或 JSON。

class Record < ActiveRecord::Base
  serialize :items
end

调用record.items 会完全按照您需要的方式返回数据。如果你这样做,你将不得不更新你的旧记录来支持它。

【讨论】:

    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    相关资源
    最近更新 更多