这可能不是 设计 具体,但我想知道如何在 时添加一个已安装的gem的附加模块初始安装不包括所述模块?对于Devise,迁移助手t.confirmable
在初始迁移的Self.up
方法中很有用,整个用户表在Self.down
中被删除。我的Rails-fu不够强大,无法揭示t.confirmable
帮助者实际在做什么......
当User
表已存在并且您想添加:confirmable
或:token_authenticatable
之类的内容时会发生什么?显然你不能再create_table(:users)
......所以我认为我想add_column :users, ...
和remove_column :users, ...
但是我们如何去寻找需要发生的事情呢?
答案 0 :(得分:4)
看看Devise :: Schema
https://github.com/plataformatec/devise/blob/master/lib/devise/schema.rb
有这个
# Creates confirmation_token, confirmed_at and confirmation_sent_at.
def confirmable
apply_devise_schema :confirmation_token, String
apply_devise_schema :confirmed_at, DateTime
apply_devise_schema :confirmation_sent_at, DateTime
end
然后
https://github.com/plataformatec/devise/blob/master/lib/devise/orm/active_record.rb
def apply_devise_schema(name, type, options={})
column name, type.to_s.downcase.to_sym, options
end
所以在你的迁移中只需要做
add_column :users, :confirmation_token, :string
add_column :users, :confirmed_at, :datetime
add_column :users, :confirmation_sent_at, :datetime
与下来相反..
答案 1 :(得分:0)
您的迁移:
class DeviseAddConfirmable < ActiveRecord::Migration
def change
change_table(:users) do |t|
t.confirmable
end
add_index :users, :confirmation_token, :unique => true
end
end