我已经创建了一个迁移,以便在Rails中将is_ms_admin
列添加到我的MySQL数据库中:
class AddIsAdminToUsers < ActiveRecord::Migration
def change
add_column :users, :is_ms_admin, :boolean
end
end
这相应地更新了架构:
create_table "users", force: :cascade do |t|
t.string "email", limit: 255, default: "", null: false
t.string "encrypted_password", limit: 255, default: "", null: false
t.datetime "remember_created_at"
t.integer "sign_in_count", limit: 4, default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip", limit: 255
t.string "last_sign_in_ip", limit: 255
t.datetime "created_at"
t.datetime "updated_at"
t.boolean "is_approved"
t.string "reset_password_token", limit: 255
t.datetime "reset_password_sent_at"
t.boolean "is_ms_admin"
end
在运行rake db:migrate
时,迁移运行时不会抛出任何错误。使用rake db:schema:load
也没有错误。两者似乎都很成功。
但是,当我从MySQL表中选择列名时,只存在大多数列:
mysql> SELECT `COLUMN_NAME`
-> FROM `INFORMATION_SCHEMA`.`COLUMNS`
-> WHERE `TABLE_SCHEMA`='metasmoke'
-> AND `TABLE_NAME`='users';
+---------------------+
| COLUMN_NAME |
+---------------------+
| id |
| email |
| encrypted_password |
| remember_created_at |
| sign_in_count |
| current_sign_in_at |
| last_sign_in_at |
| current_sign_in_ip |
| last_sign_in_ip |
| created_at |
| updated_at |
| is_approved |
+---------------------+
我主要关注is_ms_admin
列,但了解两个reset_password
列不存在的原因也很有用。
我没有从Rails控制台运行所有这些,所以问题不在于控制台有缓存的东西;在重新加载INFORMATION_SCHEMA
表的情况下,很明显列并非根本创建,而不是任何周围的问题。
为什么列不存在,我该如何解决?