Rails Postgre问题:格式错误的数组文字,数组值必须以" {"或维度信息

时间:2017-10-02 14:25:07

标签: ruby-on-rails postgresql heroku

我在Heroku上为我的Rails应用程序创建了一个新的迁移。它添加了一些像这样的数组列:

t.string :timezone, array: true, default: [].to_yaml
t.string :locale, array: true, default: [].to_yaml

尝试迁移时出现以下错误:

  

ActiveRecord :: StatementInvalid:PG :: InvalidTextRepresentation:ERROR:   格式错误的数组文字:" --- []" DETAIL:数组值必须开始   与" {"或维度信息。 :CREATE TABLE"过滤器" (" ID"   串行主键," letter_id"整数,"性别"性格变化,   "时区"字符变化[] DEFAULT' --- []'," locale"字符   变化[] DEFAULT' --- []

这是我的模特:

class Filter < ApplicationRecord
  belongs_to :letter
  serialize :timezone
  serialize :locale
  serialize :segment
  validates_uniqueness_of :letter_id
end

Stackoverflow上的一些人说删除serialize会有所作为,但我需要存储一个数组,而不是字符串。

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

你为什么不这样做:

t.text :your_table, :timezone, default: []
t.text :your_table, :locale, default: []

不确定为什么要调用to_yaml作为默认值。此外,您应该使用text列类型,因为字符串默认情况下可能会限制为255个字符。

答案 1 :(得分:0)

最后,我做了以下事情,它解决了我的问题:

t.string :timezone, :string
t.string :locale, :string

并使用序列化保留我的模型。