2012-10-31 27 views
1

我想添加一個新列:「:第一個」移動參數不起作用?

class AddNameToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :name, :string, :first => true 
    end 
end 

我包括參數:first放置列中的所有其他人面前。但似乎沒有工作:

create_table "users", :force => true do |t| 
    t.string "email",     :default => "", :null => false 
    t.string "encrypted_password",  :default => "", :null => false 
    t.string "reset_password_token" 
    t.datetime "reset_password_sent_at" 
    t.datetime "remember_created_at" 
    t.integer "sign_in_count",   :default => 0 
    t.datetime "current_sign_in_at" 
    t.datetime "last_sign_in_at" 
    t.string "current_sign_in_ip" 
    t.string "last_sign_in_ip" 
    t.string "name" 
    end 

我做錯了什麼?

回答

2

我們無法使用遷移文件來實現此目的。但我們可以做到以下幾點..

 ActiveRecord::ConnectionAdapters::MysqlAdapter.class_eval do 
    def add_column_options!(sql, options) 
    super 
    if options[:after] 
    sql << " AFTER #{quote_column_name(options[:after])}" 
    elsif options[:first] 
    sql << " FIRST" 
    end 
    end 
    end 

    So now 

    a.add_column :users, :name, :string, :after => "baz" 

     will execute 

     ALTER TABLE `users` ADD `name` varchar(20) AFTER `baz` 

     and 

     a.add_column :users, :name, :string, :first => true 

     will execute 

     ALTER TABLE `users` ADD `name` varchar(20) FIRST 

     Likewise for change_column. 
+0

謝謝,但對不起,該代碼使:首先?我應該在哪裏編碼? – alexchenco

+0

如果您使用的是MySQL,那麼這個代碼就是MysqlAdapter的monkey-patch,它會添加選項:after和:first to add_column和change_column。 – vijikumar

相關問題