Rails5 迁移:无法引用数组

Rails5 migration: can't quote Array

我尝试将我的应用程序从 Rails 4 迁移到 Rails 5 这是我的迁移:

class AddRevealedIdsToUser < ActiveRecord::Migration[5.0]
  def change
    add_column :users, :revealed_ids, :text, default: []
  end
end

和型号:

serialize :revealed_ids

它在 Rails 4 中完美运行,现在我有一个错误:

== 20160416214334 AddRevealedIdsToUser: migrating =============================
-- add_column(:users, :revealed_ids, :text, {:default=>[]})
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

can't quote Array
/usr/local/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/abstract/quoting.rb:177:in `_quote'
/usr/local/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql/quoting.rb:96:in `_quote'

如何解决?

作为临时解决方案,我手动将其序列化。

add_column :users, :revealed_ids, :text, default: [].to_yaml

在 Rails 存储库中打开了一个问题。

您可以尝试将 array:true 添加到迁移中。

add_column :users, :revealed_ids, :text, default: [], array:true

帮我修好了。

我还想为那些在他们的 rails 应用程序中用这个撞墙的人添加。我的解决方法是切换到 Postgres 数据库而不是 SQLite 数据库。 Postgres 可以处理更高级的数据结构。

切换到 Postgres 数据库后,我可以运行以下代码进行迁移,没有任何错误。

add_column :users, :revealed_ids, :text, default: [], array:true