使用ActiveRecord在sqlite / pg数据库中存储数组

时间:2014-12-09 18:11:42

标签: ruby-on-rails sqlite postgresql activerecord

我正在尝试在heroku PG数据库中存储一个字符串数组。

我已经尝试过将marshal转储到一个在sqlite中工作的字符串。但是对于PG,如果数组太大,则不会保存整个转储字符串,并且在尝试访问时无法加载数组。当试图访问该数组时,我得到错误`marshal data too short'

迁移

add_column :orders, :photo_urls, :text, :limit => nil

或者,我尝试在模型中使用serialize :photo_urls。同样,这适用于sqlite,但在生产PG中,我收到错误array value must start with "{" or dimension information

尝试使用不同的默认设置进行迁移:

add_column :orders, :photo_urls, :text, array: true, default: []
add_column :orders, :photo_urls, :text, array: true, default: '{}'

是否有不同的方法在sqlite和PG中存储数组?

1 个答案:

答案 0 :(得分:0)

我必须在我的开发环境中为sqlite序列化数组。

serialize :photo_urls if Rails.env.development?

迁移

add_column :orders, :photo_urls, :text, array: true, default: []