2013-09-02 7 views
0

Я немного новичок в мире Rails, и я пытаюсь добавить новое поле в схему разработки.rails generate devise Ошибка пользователя при переносе

Я нашел это:

rails generate model NAME [field[:type][:index] field[:type] 

и пытался применить команду:

rails generate devise User linkedin:string 

Процесс казался правильным:

invoke active_record 
    create db/migrate/20130902085306_add_devise_to_users.rb 
    insert app/models/user.rb 
    route devise_for :users 

Но когда я запускаю БД: мигрировать его возникает ошибка:

PG::Error: ERROR: column "email" of relation "users" already exists 

Что я сделал не так? почему он говорит (и это связано), электронная почта ошибочна, пока она была в порядке раньше?

Большое спасибо!


Вот результат миграции файла:

class AddDeviseToUsers < ActiveRecord::Migration 
def self.up 
change_table(:users) do |t| 
    ## Database authenticatable 
    t.string :email,    :null => false, :default => "" 
    t.string :encrypted_password, :null => false, :default => "" 

    ## Recoverable 
    t.string :reset_password_token 
    t.datetime :reset_password_sent_at 

    ## Rememberable 
    t.datetime :remember_created_at 

    ## Trackable 
    t.integer :sign_in_count, :default => 0 
    t.datetime :current_sign_in_at 
    t.datetime :last_sign_in_at 
    t.string :current_sign_in_ip 
    t.string :last_sign_in_ip 

    ## Confirmable 
    # t.string :confirmation_token 
    # t.datetime :confirmed_at 
    # t.datetime :confirmation_sent_at 
    # t.string :unconfirmed_email # Only if using reconfirmable 

    ## Lockable 
    # t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts 
    # t.string :unlock_token # Only if unlock strategy is :email or :both 
    # t.datetime :locked_at 

    ## Token authenticatable 
    # t.string :authentication_token 

    t.string :linkedin 

    # Uncomment below if timestamps were not included in your original model. 
    # 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 
# add_index :users, :authentication_token, :unique => true 
end 

def self.down 
# By default, we don't want to make any assumption about how to roll back a migration when your 
# model already existed. Please edit below which fields you would like to remove in this migration. 
raise ActiveRecord::IrreversibleMigration 
end 
end 

ответ

0

ли ваша таблица пользователей уже есть поле электронной почты? Кажется, что есть, вы должны удалить создание поля электронной почты еще раз, удалив его из миграции и убедитесь, что он не ссылается дважды в user.rb модели

db/migrate/20130902085306_add_devise_to_users.rb 
+0

true! файл миграции начинается с этого: change_table (: users) do | t | ## База данных аутентифицируется t.string: email,: null => false,: default => "" t.string: encrypted_password,: null => false,: default => "" Но почему новое связанное поле является не определено здесь? – user1713964

+0

Поле LinkedIn? Я не уверен, что он включает его? но похоже, что вы прокомментировали аутентифицируемое поле – techvineet

+0

Хорошо, ожидая кода, существует декларация t.string: linkedin, но файл миграции, похоже, «создает» всю таблицу, а не обновляет ее. – user1713964

0

Ok! Я нашел, что не так: я создал новую таблицу вместо обновления существующей. Так хорошая задача была:

rails g migration add_columnLinkedin_to_users 

Затем, добавив в новой созданной миграции файла:

change_table :users do |t| 
    t.string :linkedin 
end 

И дб: мигрирует был успех!

Спасибо за помощь!

Смежные вопросы