postgres字符串数组中的空字符串被删除

时间:2013-08-08 21:52:20

标签: ruby-on-rails-4 postgresql-9.2 pg

与Postgres 9.2的Rails 4。 'pg'宝石版本0.16.0。

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

t.string "codes",  array: true

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

["", "a string"]

在数据库表格中,此字段的数据存储为{"","a string"},这正是我所期望的。

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

["a string"]

a)我在阵列中的(有意放置的)空字符串发生了什么变化?

b)如果我用一个空格字符替换空字符串,则检索到的属性看起来很好( [“”,“一个字符串”] ),但我希望没有诉诸于此。

2 个答案:

答案 0 :(得分:2)

经过多次挖掘后,我找到了一些对于寻找同一问题解决方案的人有用的东西。

Rails中的Postgres适配器依赖于外部gem pg_array_parser来解决高效的数组解析问题,如果项目中有这个gem,则默认处理它。

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

Rails中的相关行:

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

答案 1 :(得分:0)

这些文章可能有所帮助:

  1. Storing arrays in database using ActiveRecord
  2. rails store array in to database field
  3. http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-serialize
  4. 看起来您需要序列化列:

    class MyStuff < ActiveRecord::Base  
      serialize :things
    end