Rails Postgre 问题:数组文字格式错误,数组值必须以“”或维度信息开头
Posted
技术标签:
【中文标题】Rails Postgre 问题:数组文字格式错误,数组值必须以“”或维度信息开头【英文标题】:Rails Postgre issue: malformed array literal, Array value must start with "" or dimension informationRails Postgre 问题:数组文字格式错误,数组值必须以“”或维度信息开头 【发布时间】:2017-10-02 14:25:06 【问题描述】:我在 Heroku 上为我的 Rails 应用创建了一个新的迁移。它添加了一些这样的 Array 列:
t.string :timezone, array: true, default: [].to_yaml
t.string :locale, array: true, default: [].to_yaml
我在尝试迁移时收到以下错误:
ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: 错误: 格式错误的数组文字:“--- []” 详细信息:数组值必须以开头 带有“”或维度信息。 :创建表“过滤器”(“id” 序列主键,“letter_id”整数,“性别”字符变化, “时区”字符变化[] DEFAULT '--- []',“区域设置”字符 变化[]默认'--- []
这是我的模型:
class Filter < ApplicationRecord
belongs_to :letter
serialize :timezone
serialize :locale
serialize :segment
validates_uniqueness_of :letter_id
end
*** 上的一些人说删除序列化可以解决问题,但我需要存储一个数组,而不是字符串。
知道如何解决这个问题吗?
【问题讨论】:
【参考方案1】:你为什么不这样做:
t.text :your_table, :timezone, default: []
t.text :your_table, :locale, default: []
不知道为什么你会调用to_yaml
来获取默认值。此外,您应该使用 text
列类型,因为默认情况下字符串可能会将您限制为 255 个字符。
【讨论】:
【参考方案2】:最后,我做了以下并解决了我的问题:
t.string :timezone, :string
t.string :locale, :string
并通过序列化保留我的模型。
【讨论】:
以上是关于Rails Postgre 问题:数组文字格式错误,数组值必须以“”或维度信息开头的主要内容,如果未能解决你的问题,请参考以下文章
将包含对象数组的 json 传递给 PostgreSQL 函数会引发格式错误的数组文字。意外的数组元素
Django 数据库迁移错误(sqlite3->postgre)