Разработать гем: добавить модуль после начальной установки - PullRequest
4 голосов
/ 12 декабря 2010

Возможно, это не Разработка , но мне интересно, как добавить дополнительный модуль к гему, который уже установлен при первоначальной установкене включал указанный модуль?В случае с Devise помощник по миграции t.confirmable полезен в методе начальной миграции Self.up, а вся таблица User уничтожена в Self.down.Мой Rails-fu не достаточно силен, чтобы понять, что на самом деле делает помощник t.confirmable ...

Что происходит, когда таблица User уже существует, и вы хотите добавить что-то вроде :confirmable или:token_authenticatable?Очевидно, что вы не можете просто create_table(:users) снова ... так что я думаю, что я хочу add_column :users, ... и remove_column :users, ..., но как нам узнать, что должно произойти?

Ответы [ 2 ]

4 голосов
/ 13 декабря 2010

Взгляните на 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 

и наоборот для вниз ..

0 голосов
/ 08 февраля 2012

Ваша миграция:

  class DeviseAddConfirmable < ActiveRecord::Migration
     def change
       change_table(:users) do |t|
          t.confirmable
       end

       add_index :users, :confirmation_token,   :unique => true
     end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...