我在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会有所作为,但我需要存储一个数组,而不是字符串。
知道如何解决这个问题吗?
答案 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
并使用序列化保留我的模型。