我正在開發一款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