Rails Postgre 问题:数组文字格式不正确,数组值必须以"{"或维度信息开头



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

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

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

ActivereCord :: StatementInvalid:PG :: InvalidTextrePersentation:错误: 畸形的数组文字:" ---- []"细节:数组值必须启动 使用" {"或维度信息。:创建表"过滤器"(" ID") 串行主键," letter_id"整数,"性别"字符变化, "时区"字符变化[]默认'--- []'," locale"字符 变化[]默认'--- []

这是我的模型:

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

stackoverflow上的某些人说删除序列化将有能力解决问题,但我需要存储一个数组,而不是字符串。

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

为什么不这样做:

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

不确定为什么您会致电to_yaml以获取默认值。另外,您应该使用text的列类型,因为字符串默认情况下可能会将您限制为255个字符。

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

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

并将我的模型保持序列化。

最新更新