我正在使用Devise迁移文件。最初是这样的:
class DeviseCreateUsers < ActiveRecord::Migration
def self.up
create_table(:users) do |t|
t.database_authenticatable :null => false
t.recoverable
t.rememberable
t.trackable
# t.encryptable
# t.confirmable
# t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
# t.token_authenticatable
t.timestamps
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
# add_index :users, :confirmation_token, :unique => true
# add_index :users, :unlock_token, :unique => true
# add_index :users, :authentication_token, :unique => true
end
def self.down
drop_table :users
end
end
我想添加3个这样的列:
t.first_name t.last_name t.organization_name
一旦我做了更改,我的迁移文件就像这样:
class DeviseCreateUsers < ActiveRecord::Migration
def self.up
create_table(:users) do |t|
t.database_authenticatable :null => false
t.recoverable
t.rememberable
t.trackable
t.first_name
t.last_name
t.organization_name
# t.encryptable
# t.confirmable
# t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
# t.token_authenticatable
t.timestamps
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
# add_index :users, :confirmation_token, :unique => true
# add_index :users, :unlock_token, :unique => true
# add_index :users, :authentication_token, :unique => true
end
def self.down
drop_table :users
end
end
然后从命令行运行此命令:
rake db:migrate
生成的db表没有反映我尝试添加的列。这是它的样子:
describe users;
+------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| email | varchar(255) | NO | UNI | | |
| encrypted_password | varchar(128) | NO | | | |
| reset_password_token | varchar(255) | YES | UNI | NULL | |
| reset_password_sent_at | datetime | YES | | NULL | |
| remember_created_at | datetime | YES | | NULL | |
| sign_in_count | int(11) | YES | | 0 | |
| current_sign_in_at | datetime | YES | | NULL | |
| last_sign_in_at | datetime | YES | | NULL | |
| current_sign_in_ip | varchar(255) | YES | | NULL | |
| last_sign_in_ip | varchar(255) | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
+------------------------+--------------+------+-----+---------+----------------+
知道为什么我的尝试改变没有出现?如何强制进行更改?
谢谢!
答案 0 :(得分:3)
修复您的迁移文件,它有一些错误:
...
t.first_name
t.last_name
t.organization_name
...
按以下方式更改:
...
t.string :first_name
t.string :last_name
t.string :organization_name
...
您可以查看Migration guide了解详情。
更改后,如果表格users
不存在,您可以执行rake db:migrate
;如果存在,请rake db:migrate:redo
。
顺便说一句,您最好使用其他迁移来添加/删除/更改表格列。
答案 1 :(得分:1)
最好不要改变现有的迁移,即使在开发中也是如此,但有时候它是可以接受的。
如果您已经运行此迁移,则不会再使用rake db:migrate
再次运行,因为只会运行比架构版本更新的迁移。
要再次运行上次迁移,您可以执行rake db:migrate:redo