【问题标题】: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

Stackoverflow 上的一些人说删除序列化可以解决问题,但我需要存储一个数组,而不是字符串。

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

【问题讨论】:

    标签: ruby-on-rails postgresql heroku


    【解决方案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
      

      并通过序列化保留我的模型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-13
        • 2020-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多