":第一迁移论点不起作用



我想添加一个新列:

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

我做错了什么?

我们无法使用迁移文件实现此目标。但是我们可以做以下操作。

     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.

最新更新