2014-08-28 30 views
0

我有一個表最初定義了一列的默認值。我需要更改或刪除默認值。Rails遷移需要不可移植的SQL

  • 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 
+0

哪些是您的列的規格? – VMai 2014-08-28 22:28:07

+0

[Adding:default => true在現有Rails列中爲boolean]的可能重複(http://stackoverflow.com/questions/8627156/adding-default-true-to-boolean-in-existing-rails-column) – 2014-08-29 06:28:32

回答

0

謝謝,布拉德韋斯:;你是對的,這實際上是一個騙局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