我在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
并将我的模型保持序列化。