我们已经在项目开始时创建了一个用户模型,但是现在(稍后几次迁移)我们想使用devise gem。如果用户模型和表已经存在,是否可以添加设计?也就是说,是否可以改变已经完成的工作,或者我们是否必须重新开始?
答案 0 :(得分:4)
Cavert Coder,但是:
(注意,这不会迁移“:lockable”因为我在编写它时并不关心它现在包括:可锁定因为MattSlay比我更关心:)。此外,您还需要将用户密码迁移到加密密码字段中。最后,它可能不适合你。遗憾。)
class AddDevise < ActiveRecord::Migration
def self.up
null = false
default = ""
add_column :users, :encrypted_password, :string, :null => null, :default => default, :limit => 128
add_column :users, :password_salt, :string
add_column :users, :authentication_token, :string
add_column :users, :confirmation_token, :string
add_column :users, :confirmed_at, :datetime
add_column :users, :confirmation_sent_at, :datetime
add_column :users, :reset_password_token, :string
add_column :users, :remember_token, :string
add_column :users, :remember_created_at, :datetime
add_column :users, :sign_in_count, :integer, :default => 0
add_column :users, :current_sign_in_at, :datetime
add_column :users, :last_sign_in_at, :datetime
add_column :users, :current_sign_in_ip, :string
add_column :users, :last_sign_in_ip, :string
#:lockable fields contributed by MattSlay
add_column :users, :failed_attempts, :integer, :default => 0
add_column :users, :unlock_token, :string
add_column :users, :locked_at, :datetime
end
def self.down
remove_column :users, :encrypted_password
remove_column :users, :password_salt
remove_column :users, :authentication_token
remove_column :users, :confirmation_token
remove_column :users, :confirmed_at
remove_column :users, :confirmation_sent_at
remove_column :users, :reset_password_token
remove_column :users, :remember_token
remove_column :users, :remember_created_at
remove_column :users, :sign_in_count
remove_column :users, :current_sign_in_at
remove_column :users, :last_sign_in_at
remove_column :users, :current_sign_in_ip
remove_column :users, :last_sign_in_ip
remove_column :users, :failed_attempts
remove_column :users, :unlock_token
remove_column :users, :locked_at
end
end
答案 1 :(得分:3)
除了Aquarion提供的列表之外,如果您希望在User模型上实现:lockable选项,我想我已经找到了您需要的三个字段:
add_column :users, :failed_attempts, :integer, :default => 0
add_column :users, :unlock_token, :string
add_column :users, :locked_at, :datetime
答案 2 :(得分:0)
我做到了。它有点痛苦,但Devise值得。制作一个虚拟应用程序并进行迁移。然后看看schema.rb并编写一些与现有用户模型做同样事情的迁移。
或者,您可以阅读源代码并找出“database_authenticateable”之类的内容。你应该开始here。