没有将数组隐式转换为字符串 - Rails Migration
问题描述:
尝试在新机器上启动并运行应用程序。可能会使用Ruby的稍微更新版本(2.3.4 vs 2.3.1),而Rails版本是5.1.3。没有将数组隐式转换为字符串 - Rails Migration
这里的迁移:
class AddDragAndDropRules < ActiveRecord::Migration[5.0]
def change
add_column :products, :fixture_location, :string, default: "none"
add_column :products, :attaches_to, :uuid, array: true, default: []
end
end
问题时rails db:migrate
。
错误:
== 20160928162420 AddDragAndDropRules: migrating ==============================
-- add_column(:products, :fixture_location, :string, {:default=>"none"})
-> 0.0142s
-- add_column(:products, :attaches_to, :uuid, {:array=>true, :default=>[]})
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:
no implicit conversion of Array into String
/Users/mike/api/db/migrate/20160928162420_add_drag_and_drop_rules.rb:4:in `change'
bin/rails:9:in `require'
bin/rails:9:in `<main>'
TypeError: no implicit conversion of Array into String
/Users/mike/api/db/migrate/20160928162420_add_drag_and_drop_rules.rb:4:in `change'
bin/rails:9:in `require'
bin/rails:9:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
任何人都能够发现这个错误吗?
答
如果这有助于其他任何人 - 项目升级到Rails 5.1.3的某个点,导致UUID阵列迁移由于错误而失败。
问题是在这里(https://github.com/rails/rails/issues/30539)和解决方法在5.1.2-5.1.3是要做到这一点:
add_column :products, :attaches_to, :uuid, array: true, default: '{}'
应固定在5.1.4及以上。