我正在学习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
答案 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)
在迁移文件中更改所需的行,然后按照以下说明重新进行迁移: