我有一个表,该表最初定义为一列的默认值。我需要更改或删除默认设置。
RubyOnRails.org似乎(出于沉默)说,此更改并未为ActiveRecord::Migration
的可移植性而包装。
W3schools似乎说所需的SQL无法在MySQL和SQLite(我的两个DB)之间移植。
如果我读错了任何一个,那么理清我就足够了。除此以外:
在ActiveRecord::Migration#up
例程中,如何编写对基础数据库敏感的execute
调用?例如,我可以查看config/database.yml
中的活动值吗?
当前表defn(来自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/