2014-01-27 3 views
1

При попытке войти в мое приложение rails появляется следующее сообщение об ошибке. Я использовал для проверки подлинность. Моя ошибка NoMethodError в Devise :: SessionsController # создать неопределенный метод `current_sign_in_at»NoMethodError in Devise :: SessionsController # create undefined method `current_sign_in_at '

Моя модель пользователя

models/user.rb 
devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, :omniauthable 
attr_accessible :admin,:first_name, :last_name, :profile_name, :college_name, :email, :password, :password_confirmation, :remember_me, :provider, :uid 
def admin? 

end 
def self.find_for_facebook_oauth(auth) 
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user| 
user.provider = auth.provider 
user.uid = auth.uid 
user.email = auth.info.email 
user.password = Devise.friendly_token[0,20] 
#user.name = auth.info.name # assuming the user model has a name 
#user.image = auth.info.image # assuming the user model has an image 
user.save! 
end 
end 
end 

Моя схема является

db/schema.rb 
ActiveRecord::Schema.define(:version => 20140126101946) do 

create_table "levels", :force => true do |t| 
t.datetime "created_at", :null => false 
t.datetime "updated_at", :null => false 
end 

create_table "users", :force => true do |t| 
t.string "first_name" 
t.string "last_name" 
t.string "profile_name" 
t.string "college_name" 
t.string "email",     :default => "", :null => false 
t.string "encrypted_password",  :default => "", :null => false 
t.string "reset_password_token" 
t.datetime "reset_password_sent_at" 
t.datetime "remember_created_at" 
t.datetime "created_at",        :null => false 
t.datetime "updated_at",        :null => false 
t.string "provider" 
t.string "uid" 
t.boolean "admin",     :default => false 
end 

add_index "users", ["email"], :name => "index_users_on_email", :unique => true 
add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true 

end 

Код в моем devise_create_users.rb является

class DeviseCreateUsers < ActiveRecord::Migration 
def change 
create_table(:users) do |t| 
    t.string :first_name 
    t.string :last_name 
    t.string :profile_name 
    t.string :college_name 
    ## 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 

Мой трек был прокомментирован, и я удалил комментарии, а затем запустил rake db: migrate, но ничего не произошло. Теперь я не могу удалить отслеживаемый, поскольку мне это нужно. Мне нужно то, что каким-то образом я могу сохранить свое приложение так, как есть, а также добавить его для отслеживания таким образом, чтобы он также добавлялся к schema.rb.

+0

ли вы сделать 'грабли БД: rollback', а затем повторно запустить миграцию с' rake db: migrate'? –

ответ

3

Чтобы добавить новые столбцы в существующие таблицы, просто обновление миграции уже не будет работать, поскольку схема находится в более поздней версии, чем версия существующей миграции. Если вы хотите изменить существующую миграцию, можно запустить down миграции с:

rake db:migrate:down VERSION=20140126101944 # use version of the user migration 

Затем измените миграцию добавления новых столбцов, как вы уже сделали, а затем запустить up миграции с помощью:

rake db:migrate up VERSION=20140126101944 # use version of the user migration 

Лучшим подходом является добавление новой миграции с изменением, если ваше приложение уже готово.

Чтобы добавить trackable столбцы в существующий users таблицу:

class AddTrackableColumnsToUser < ActiveRecord::Migration 
    def change 
    change_table :users do |t| 
     ## Trackable 
     t.add_column :sign_in_count, :integer, :default => 0 
     t.add_column :current_sign_in_at, :datetime 
     t.add_column :last_sign_in_at, :datetime 
     t.add_column :current_sign_in_ip, :string 
     t.add_column :last_sign_in_ip, :string 
    end 
    end 
end 

Затем запустите db:migrate:

rake db:migrate 
+0

Бегает как шарм. Спасибо @vee – anonn023432

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