Rails,Omniauth:NoMethodError - 未定义的方法“持续存在?”
Rails, Omniauth: NoMethodError - undefined method `persisted?'
我正在使用 omniauth-stripe-connect
gem 并在验证用户时收到以下错误:
NoMethodError in Users::OmniauthCallbacksController#stripe_connect
undefined method `persisted?' for nil:NilClass
我的回调控制器操作:
def stripe_connect
@user = UserProvider.find_for_stripe_oauth(request.env["omniauth.auth"])
if @user.persisted? # here is the issue !!!
sign_in @user, :event => :authentication
redirect_to root_path
end
end
我的用户方法:
def self.find_for_stripe_oauth(auth)
user = UserProvider.where(:provider => auth.provider, :uid => auth.uid).first
unless user.nil?
user.user
else
registered_user = User.where(:email => auth.info.email).first
unless registered_user.nil?
user_provider = UserProvider.new
user_provider.provider = auth.provider
user_provider.uid = auth.uid
user_provider.user_id = registered_user.id
user_provider.save!
registered_user.stripe_access_code = auth.credentials.token
registered_user.stripe_publishable_key = auth.info.stripe_publishable_key
registered_user.stripe_id = auth.extra.raw_info.stripe_user_id
registered_user.skip_confirmation!
registered_user.save!
registered_user
end
end
end
我做错了什么?
find_for_stripe_oauth
returns nil
如果 registered_user
不存在。在这种情况下 unless registered_user.nil?
returns false
并且不执行内部块。
搬出去registered_user
,像这样:
registered_user = User.where(:email => auth.info.email).first
unless registered_user.nil?
user_provider = UserProvider.new
user_provider.provider = auth.provider
user_provider.uid = auth.uid
user_provider.user_id = registered_user.id
user_provider.save!
registered_user.stripe_access_code = auth.credentials.token
registered_user.stripe_publishable_key = auth.info.stripe_publishable_key
registered_user.stripe_id = auth.extra.raw_info.stripe_user_id
registered_user.skip_confirmation!
registered_user.save!
end
registered_user
我正在使用 omniauth-stripe-connect
gem 并在验证用户时收到以下错误:
NoMethodError in Users::OmniauthCallbacksController#stripe_connect undefined method `persisted?' for nil:NilClass
我的回调控制器操作:
def stripe_connect
@user = UserProvider.find_for_stripe_oauth(request.env["omniauth.auth"])
if @user.persisted? # here is the issue !!!
sign_in @user, :event => :authentication
redirect_to root_path
end
end
我的用户方法:
def self.find_for_stripe_oauth(auth)
user = UserProvider.where(:provider => auth.provider, :uid => auth.uid).first
unless user.nil?
user.user
else
registered_user = User.where(:email => auth.info.email).first
unless registered_user.nil?
user_provider = UserProvider.new
user_provider.provider = auth.provider
user_provider.uid = auth.uid
user_provider.user_id = registered_user.id
user_provider.save!
registered_user.stripe_access_code = auth.credentials.token
registered_user.stripe_publishable_key = auth.info.stripe_publishable_key
registered_user.stripe_id = auth.extra.raw_info.stripe_user_id
registered_user.skip_confirmation!
registered_user.save!
registered_user
end
end
end
我做错了什么?
find_for_stripe_oauth
returns nil
如果 registered_user
不存在。在这种情况下 unless registered_user.nil?
returns false
并且不执行内部块。
搬出去registered_user
,像这样:
registered_user = User.where(:email => auth.info.email).first
unless registered_user.nil?
user_provider = UserProvider.new
user_provider.provider = auth.provider
user_provider.uid = auth.uid
user_provider.user_id = registered_user.id
user_provider.save!
registered_user.stripe_access_code = auth.credentials.token
registered_user.stripe_publishable_key = auth.info.stripe_publishable_key
registered_user.stripe_id = auth.extra.raw_info.stripe_user_id
registered_user.skip_confirmation!
registered_user.save!
end
registered_user