我有一个表,该表最初定义为一列的默认值。我需要更改或删除默认设置。


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/

10-13 01:26