SessionsController中的Rails 4 NoMethodError#为nil创建未定义的方法`slice':NilClass

时间:2013-10-24 12:41:51

标签: ruby-on-rails ruby ruby-on-rails-4

我的会话控制器

       class SessionsController < ApplicationController
         def create
         user = User.from_omniauth(env["omniauth.auth"])

         session[:user_id] = user.id
         redirect_to root_url
        end

       def destroy
           session[:user_id] = nil
           redirect_to root_url
        end
            end

我的user.rb

      class User < ActiveRecord::Base

       def self.from_omniauth(auth)
             where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
           user.provider = auth.provider
           user.uid = auth.uid
           user.name = auth.info.name
           user.oauth_token = auth.credentials.token
           user.oauth_expires_at = Time.at(auth.credentials.expires_at)
           user.save!
     end
  end

端 任何人都可以告诉我错误的原因我在S.O搜索同样但不能找到相关的解决方案

1 个答案:

答案 0 :(得分:0)

我解决了这个问题

self.from_omniauth尝试创建新用户,因此我收到验证错误电子邮件不能留空或用户名不能留空,因此请注释您的验证并尝试。

在模型中使用rails模型场景&#34;在&#34; =&gt;&#34;创建&#34; ,&#34; on&#34; =&gt;&#34;更新&#34;在您的验证中