2016-07-07 6 views
0

вот моя текущая схема пользователя:проблемы с установкой разработать

# == Schema Information 
# 
# Table name: users 
# 
# id   :integer   not null, primary key 
# first_name :string 
# last_name :string 
# created_at :datetime   not null 
# updated_at :datetime   not null 
# 
require 'elasticsearch/model' 

class User < ActiveRecord::Base 
    searchkick word_start: [:user] 
    has_many :posts 
    validates :first_name, :last_name, presence: true 
end 

эти шаги я в состоянии пройти, прежде чем проблемы поднимает голову:

rails generate devise:install  
rails generate devise user   
rake db:migrate 

раз я пытаюсь перенести это то, что возникает:

== 20160707230510 AddDeviseToUsers: migrating ================================= 
-- change_table(:users) 
rake aborted! 
StandardError: An error has occurred, this and all later migrations canceled: 

PG::DuplicateColumn: ERROR: column "email" of relation "users" already exists 
: ALTER TABLE "users" ADD "email" character varying DEFAULT '' NOT NULL 
/Users/aa/Documents/railsy/basicProject/db/migrate/20160707230510_add_devise_to_users.rb:5:in `block in up' 
/Users/aa/Documents/railsy/basicProject/db/migrate/20160707230510_add_devise_to_users.rb:3:in `up' 
ActiveRecord::StatementInvalid: PG::DuplicateColumn: ERROR: column "email" of relation "users" already exists 
: ALTER TABLE "users" ADD "email" character varying DEFAULT '' NOT NULL 
/Users/aa/Documents/railsy/basicProject/db/migrate/20160707230510_add_devise_to_users.rb:5:in `block in up' 
/Users/aa/Documents/railsy/basicProject/db/migrate/20160707230510_add_devise_to_users.rb:3:in `up' 
PG::DuplicateColumn: ERROR: column "email" of relation "users" already exists 
/Users/aa/Documents/railsy/basicProject/db/migrate/20160707230510_add_devise_to_users.rb:5:in `block in up' 
/Users/aa/Documents/railsy/basicProject/db/migrate/20160707230510_add_devise_to_users.rb:3:in `up' 
Tasks: TOP => db:migrate 
(See full trace by running task with --trace) 

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

** EDIT - должен быть размещен Разрабатывают миграции файл - тот, который не работает **

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, null: false 
     t.datetime :current_sign_in_at 
     t.datetime :last_sign_in_at 
     t.inet  :current_sign_in_ip 
     t.inet  :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, null: false # Only if lock strategy is :failed_attempts 
     # t.string :unlock_token # Only if unlock strategy is :email or :both 
     # t.datetime :locked_at 


     # Uncomment below if timestamps were not included in your original model. 
     # t.timestamps null: false 
    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 

    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 

EDIT СНОВА

когда я бегу rails g devise user ... это то, что приходит up:

Running via Spring preloader in process 72318 
     invoke active_record 
     create db/migrate/20160707230510_add_devise_to_users.rb 
     insert app/models/user.rb 
     route devise_for :users 
+0

Возможно, ваша схема устарела, но есть таблица в вашей базе данных, если есть поле. Вы можете переименовать миграцию электронной почты поля 'db/migrate/2016xxxxxx_devise_create_users.rb' и снова запустить (' bundle exec rake db: migrate'). – kalelc

+0

@kalec, моя схема не устарела. он просто не имеет столбца электронной почты. я бы знал. =) – user273072545345

+0

@kalelc, моя оригинальная пользовательская схема не имеет этого ... но я только что обновил сообщение с помощью файла миграции разработки, который я не могу запустить ... и, следовательно, его ошибки ... он перечисляет поле электронной почты в этом ... но почему это кричит дублирующее befuddles меня ... – user273072545345

ответ

0

Для устранения ошибок миграции в повторяющихся полях используйте t.change, как показано ниже.

t.change :email, :string,  :null => false, :default => "" 

Обратите внимание, что для работы t.change вы должны указать тип для изменяемого поля. В случае миграции электронной почты выше, поле электронной почты было типа string.

Вы можете обратиться по адресу: devise wiki

+0

Я бы предпочел, чтобы вы прокомментировали все столбцы, которые у вас уже есть, но были регенерированы при разработке. Если вам нужно изменить типы данных, вы можете сделать это в другой миграции – oreoluwa

+0

@ user27307254534534534543675765 при запуске этой строки 'rails generate devise user', файл миграции был создан и был назван' DeviseCreateUser'. Вы можете проверить этот файл в папке 'db/migrate' –

+0

@Khanh Pham, извиняюсь, я только что обновил свой вопрос выше с помощью файла миграции devise ... и, как вы можете видеть, он содержит столбец: email, который вы предложили запустить. .. – user273072545345

0

Оказывается, все, что я должен был сделать, чтобы сделать rake db:setup, который воссоздает дб. Затем я запустил rake db:migrate, и на этот раз никаких проблем не возникло.

FYI. Надеюсь, это поможет кому-то там.

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