如何在Ruby on Rails中将数组持久化到数据库?

Ben*_*ach 5 ruby database arrays ruby-on-rails

我试图在Rails中将一个数组数组保存到我的SQLite数据库中.

现在,我有一个可以容纳这样一个数组的对象,实例看起来没有任何问题.但是,它显然没有被持久化到数据库中 - 当我在My_Object.array上调用不同于创建数组的视图中的函数时,它出现了nil并且不起作用.

例如:

class My_Object < ActiveRecord::Base
  attr_accessor :array
end
Run Code Online (Sandbox Code Playgroud)

当我打电话时My_Object.new(:array => [ [1, 2, 3], [4, 5, 6] ]),一切似乎都能正常工作,但我无法:array在其他地方访问该物业,它只是零.

有任何想法吗?

mu *_*ort 12

首先创建一个array在表中调用的文本列.然后使用serialize:

class My_Object < ActiveRecord::Base
  serialize :array
end
Run Code Online (Sandbox Code Playgroud)

这将使用YAML自动序列化您的数组,并在您将其从数据库中拉回时自动解压缩它.

你应该重新考虑你的设计.您将无法对数据库中的序列化数据执行任何操作,特别是您将无法在查询中使用它.YAML将只是一个不透明的blob进入数据库并返回,数据库将无法使用它做任何其他事情.如果您确定数据库永远不需要查看内部,array那么继续使用serialize,否则您将需要设置额外的表来存储您的数组数据.

  • 只是一个小问题:如果要强制执行数组,可以使用`serialize:array,Array`. (3认同)