2016-01-17 9 views
0

當試圖登錄到我的網站,用戶被重定向回到主頁,而不在已簽署的。(該按鈕簽到仍然存在)Omniauth + Rails的不更新數據庫,並簽約在

我數據庫正在爲這些用戶創建新條目,但不更新任何信息。 (除id,provider和uid以外的所有列都是空的)

我甚至不確定從哪裏開始尋找解決這個錯誤。在我向用戶模型中添加另一列之前,這是工作的。

請幫忙!

SessionsController

class SessionsController < ApplicationController 
layout false 
def new 
end 

def create 
    begin 
     @user = User.from_omniauth(request.env['omniauth.auth']) 
     session[:user_id] = @user.id 
     flash[:success] = "Welcome, #{@user.name}!" 
    rescue 
     flash[:warning] = "There was an error while trying to authenticate you..." 
    end 
redirect_to root_path 
end 

def destroy 
    if current_user 
     session.delete(:user_id) 
     flash[:success] = 'See you!' 
    end 
     redirect_to root_path 
end 
end 

UsersController

class UsersController < ApplicationController 
def current_user 
    @current_user ||= User.find_by(id: session[:user_id]) 
end 

helper_method :current_user 

def show 

end 

def edit 
    @all_events = Event.all 
    @user_events = current_user.userevents.build 
end 

def update 
    params[:events][:id].each do |event| 
     if !event.empty? 
      current_user.userevents.build(:event_id => event) 
     end 
    end 
    eventlist = Event.all 
    usereventlist = Userevent.all 
    eventstring = "" 
    Userevent.dedupe 
    usereventlist.each do |ue| 
     if current_user.id == ue.user_id 
      eventlist.each do |ei| 
       if ei.id == ue.event_id 
        eventstring += ei.event + " " 
       end 
      end 
     end 
    end 
    current_user.events = eventstring 
    current_user.save! 
    redirect_to current_user 
end 
end 

用戶模型(user.role是添加的線)

class User < ActiveRecord::Base 
class << self 
    def from_omniauth(auth_hash) 
     user = find_or_create_by(uid: auth_hash['uid'], provider: auth_hash['provider']) 
     user.name = auth_hash['info']['name'] 
     user.location = auth_hash['info']['location'] 
     user.image_url = auth_hash['info']['image'] 
     user.url = auth_hash['info']['urls']['user.provide.capitalize'] 
     user.email = auth_hash['info']['email'] 
     user.events = nil 
     user.school = nil 
     user.role = nil 
     user.save! 
     user 
    end 
end 
has_many :userevents 
end 

遷移#_create_users.rb

class CreateUsers < ActiveRecord::Migration 
def change 
create_table :users do |t| 
    t.string :provider, null: false 
    t.string :uid, null: false 
    t.string :name 
    t.string :location 
    t.string :image_url 
    t.string :url 
    t.timestamps null: false 
end 
    add_index :users, :provider 
    add_index :users, :uid 
    add_index :users, [:provider, :uid], unique: true 
end 
end 

遷移#_add_roles_to_users.rb

class AddRolesToUsers < ActiveRecord::Migration 
def change 
    add_column :users, :role, :string 
end 
end 

回答

0

嘗試:

def from_omniauth(auth_hash) 
    user = find_or_initialize_by(uid: auth_hash['uid'], provider: auth_hash['provider']).tap do |user| 
    user.name = auth_hash['info']['name'] 
    user.location = auth_hash['info']['location'   user.image_url = auth_hash['info']['image'] 
    user.url = auth_hash['info']['urls']['user.provide.capitalize'] 
    user.email = auth_hash['info']['email'] 
    user.events = nil 
    user.school = nil 
    user.role = nil 
    end 
    user.save 
end