Модификация разработанных модулей после первого поколения - PullRequest
7 голосов
/ 29 сентября 2010

Я в процессе изучения рельсов.Я обнаружил, что 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, но я не уверен, что делать с миграциями.

Извиняюсь, если ответ уже здесь, я потратил пару часов здесь и в Google и не смог ничего найти.Может быть, я ищу не ту вещь.

Заранее спасибо!
Джейсон
пс.Я использую
rails 3.0.0
devise 1.1.3

Ответы [ 4 ]

6 голосов
/ 19 декабря 2010

Я искал ответ на тот же вопрос и, к счастью, оказался рядом с кем-то, кто знал, как это сделать.

Вот пример обновления модели пользователей для включения подтверждаемого модуля через скрипт миграции (файл скрипта скелета, созданный с помощью '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
2 голосов
/ 09 декабря 2012

Я получаю эту ошибку:

undefined local variable or method `confirmed_at' for #<User:0x000001041531c8> (NameError)

Для добавления Confirmable -

Создание миграции:

$ 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

1 голос
/ 29 сентября 2010

Пока вы просто удаляете опции, где соответствующие поля уже были добавлены в вашу схему (например, подтверждаемые), вы всегда можете просто редактировать модель «Пользователи» напрямую без новой миграции.

0 голосов
/ 29 сентября 2010

Измените нужные строки в файле миграции, затем повторите миграцию в соответствии с этими инструкциями:

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

...