我有一个表,最初定义为一列的默认值。我需要更改或删除默认值。
- RubyOnRails.org似乎(通过其沉默)表明此更改并未被
ActiveRecord::Migration
包装以实现可移植性。 - W3schools似乎说所需的 SQL 无法在 MySQL 和 SQLite(我的两个数据库)之间移植。
如果我误读了其中任何一个,那么纠正我就足够了。否则:
- 在
ActiveRecord::Migration#up
例程中,如何编写对底层数据库敏感的execute
调用?例如,我可以查看config/database.yml
中的事件值吗?
当前表定义(来自db/schema.rb
)是:
create_table "apis", force: true do |t|
t.string "provider"
t.string "endpoint"
t.string "name"
t.integer "owner_id"
t.string "status"
t.datetime "created_at"
t.datetime "updated_at"
t.string "apiary_dev_domain"
t.string "resource_root", default: "/v1", null: false
t.text "description"
end
最佳答案
谢谢,布拉德·沃斯:;你是对的,这实际上是 Adding default => true to boolean in existing Rails column 的骗局.
ActiveRecord::Migration#change_column 成功了。具体来说,我的迁移脚本是:
class DeslashifyUrlComponentsInApi < ActiveRecord::Migration
def up
change_column :apis, :resource_root, :string, default: "v1", null: false
end
def down
change_column :apis, :resource_root, :string, default: "/v1", null: false
end
end
关于mysql - Rails 迁移需要不可移植的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25558967/