设计gem:初始安装后添加模块

时间:2010-12-12 20:44:24

标签: ruby-on-rails migration gem devise

这可能不是 设计 具体,但我想知道如何在 时添加一个已安装的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, ...但是我们如何去寻找需要发生的事情呢?

2 个答案:

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