第一代后修改设计模块

时间:2010-09-29 00:19:14

标签: ruby-on-rails ruby-on-rails-3 migration devise

我正在学习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 个答案:

答案 0 :(得分:6)

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

以下是通过迁移脚本更新用户模型以包含可确认模块的示例(使用'rails生成迁移的骨架脚本文件生成迁移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

答案 1 :(得分: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

答案 2 :(得分:1)

只要您删除已将相应字段添加到架构中的选项(例如确认),您就可以直接编辑Users模型而无需新迁移。

答案 3 :(得分:0)

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

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

相关问题