7

我正在学习rails。我发现 Devise 非常适合快速无缝地启动和运行身份验证,但我确实有一个问题。

在第一次运行 Devise 生成器后如何更改模块(例如 rails g devise User)?这默认使用以下迁移:

def self.up
  create_table(:users) do |t|
    t.database_authenticatable :null => false
    t.recoverable
    t.rememberable
    t.trackable

    # 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
end

如果我已运行此迁移,我如何在稍后阶段添加/删除其中一些模块?例如,也许我想将可锁定添加到现有的用户模型。我了解如何在模型中进行更改,devise.rb但我不确定如何处理迁移。

抱歉,如果答案已经在这里,我已经在这里和谷歌搜索了几个小时,但找不到任何东西。也许我在寻找错误的东西。

提前致谢!
杰森
PS。我正在使用
rails 3.0.0
设计 1.1.3

4

4 回答 4

6

我一直在寻找同一个问题的答案,幸运的是,我碰巧坐在一个知道怎么做的人旁边。

这是通过迁移脚本(使用'rails generate migration add_confirmable_to_users'生成的框架脚本文件)更新用户模型以包含可确认模块的示例:

class AddConfirmableToUser < ActiveRecord::Migration
  def self.up
    change_table :users do |t|
      t.confirmable
    end
    add_index :users, :confirmation_token,   :unique => true
  end

  def self.down
    remove_column :users, :confirmable
    remove_index :users, :confirmation_token
  end
end
于 2010-12-19T01:26:47.393 回答
2

我收到了这个错误:

undefined local variable or method `confirmed_at' for #<User:0x000001041531c8> (NameError)

要添加可确认 -

生成迁移:

$ rails generate migration add_confirmable_to_users

编辑迁移:

class AddConfirmableToUsers < ActiveRecord::Migration
  def change
    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
  end
end

http://guides.rubyonrails.org/migrations.html
https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style

于 2012-12-09T18:25:21.907 回答
1

只要您只是删除已将适当字段添加到架构中的选项(如可确认),您始终可以直接编辑用户模型而无需新的迁移。

于 2010-09-29T00:57:32.747 回答
0

更改迁移文件中所需的行,然后按照以下说明重做迁移:

http://guides.rubyonrails.org/migrations.html

于 2010-09-29T00:30:02.023 回答