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
我尝试将我的应用程序从 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