我正在开发一款Rails应用程序,并且我添加了Devise gem来验证用户身份。我现在正在进一步开发,并且我想添加一些Devise包装的模块(特别是Confirmable,Lockable和Token authenticatable)。这些模块在最初的迁移文件中被注释掉了。我想知道是否可以简单地取消注释这些模块,然后运行“rake db:migrate”。你可以重新运行这样的迁移,还是会破坏某些东西?重新运行迁移 - 设计Gem
我会测试一下,但考虑到我已经投入开发的工作,现在我不想破坏任何东西。下面是迁移文件,因为它主张:
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
## Database authenticatable
t.string :email, :null => false, :default => ""
t.string :encrypted_password, :null => false, :default => ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
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
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
## Token authenticatable
# t.string :authentication_token
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
end
其次,如果我不能重新运行迁移时,我意识到,我必须创建新的迁移和模块手动添加到“用户”模式。例如:
rails generate migration AddConfirmationToUsers string:confirmation_token datetime:confirmed_at datetime:confirmation_sent_at string:unconfirmed_email
不过,我需要“add_index”这个新移民一样使用创建的原迁移设计。我只是将'add_index'放在迁移的底部(即'add_column'方法之后)?也许这样的事情:?
class AddConfirmableToUsers < ActiveRecord::Migration
def change
add_column :users, :price, :decimal
add_column :users, :confirmation_token, :string
add_column :users, :confirmed_at, :datetime
add_column :users, :confirmation_sent_at, :datetime
add_column :users, :unconfirmed_email, :string
add_index :users, :confirmation_token, :unique => true
end
end
这样概括:
- 我可以重新运行迁移(编辑之前迁移,然后运行 '耙分贝:迁移')?
- 如果我不能重新运行迁移,我会在哪里将'add_index'行放在新迁移中?
这正是我所做的。完全按照我上面所写的方式撰写新迁移(只需在迁移底部添加“add_index”)。 – flyingarmadillo 2012-08-06 09:58:39