1

带有 Postgres 9.2 的 Rails 4。'pg' gem 版本 0.16.0。

模型属性在 schema.rb 中如下所示:

t.string "codes",  array: true

我正在尝试在此字段中存储以下字符串数组:

["", "a string"]

在数据库表中,该字段的数据按{"","a string"}我的预期存储。

但是,在 Rails 中,通过 model.codes 检索此属性会删除数组中的第一个元素并仅返回:

["a string"]

a) 我在数组中的(故意放置的)空字符串发生了什么?

b)如果我用单个空格字符替换空字符串,则检索到的属性看起来不错([" ", "a string"]),但我希望不必诉诸于此。

4

2 回答 2

2

经过大量挖掘,我有了一些对寻找相同问题的解决方案的人有用的东西。

Rails 中的 Postgres 适配器依赖于外部 gempg_array_parser来完成高效数组解析的繁重工作,并且如果项目中可用此 gem,则默认处理它。

将这个 gem 添加到我的包时,上面列出的问题不会再次出现,并且所有数据访问/持久性都按预期运行,而不会从数组中删除空字符串。

Rails 中的相关行:

https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/postgresql/array_parser.rb#L18

于 2013-08-14T01:55:26.397 回答
0

这些文章可能会有所帮助:

  1. 使用 ActiveRecord 在数据库中存储数组
  2. rails 将数组存储到数据库字段中
  3. http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-serialize

看起来您需要序列化列:

class MyStuff < ActiveRecord::Base  
  serialize :things
end
于 2013-08-08T22:54:15.850 回答