与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)如果我用一个空格字符替换空字符串,则检索到的属性看起来很好( [“”,“一个字符串”] ),但我希望没有诉诸于此。
答案 0 :(得分:2)
经过多次挖掘后,我找到了一些对于寻找同一问题解决方案的人有用的东西。
Rails中的Postgres适配器依赖于外部gem pg_array_parser
来解决高效的数组解析问题,如果项目中有这个gem,则默认处理它。
将此gem添加到我的bundle时,上面列出的问题不再发生,并且所有数据访问/持久性都按预期运行,而不从数组中删除空字符串。
Rails中的相关行:
答案 1 :(得分:0)
这些文章可能有所帮助:
看起来您需要序列化列:
class MyStuff < ActiveRecord::Base
serialize :things
end