如果用户模型已存在,是否可以添加设计?

时间:2010-10-22 22:06:06

标签: ruby-on-rails devise

我们已经在项目开始时创建了一个用户模型,但是现在(稍后几次迁移)我们想使用devise gem。如果用户模型和表已经存在,是否可以添加设计?也就是说,是否可以改变已经完成的工作,或者我们是否必须重新开始?

3 个答案:

答案 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