gpt4 book ai didi

ruby-on-rails - 当我创建新用户时设计 current_user 返回 nil,Rails 3.2

转载 作者:太空宇宙 更新时间:2023-11-03 16:55:41 25 4
gpt4 key购买 nike

我正在开发一个 Rails 应用程序,我在其中使用 Devise 进行注册。我使用单表继承来管理用户角色,similar to this .我有三个用户模型 User < ActiveRecord , Admin < UserCollaborator < User .协作者和管理员共享 session 。我当前的问题是创建新用户,用户保存到数据库和 user_signed_in?返回 true,但 current_user 出于某种原因返回 nil。

当用户创建他们的帐户时,它应该重定向到我的 AccountsController 索引操作,如下所示:

def index
@accounts = current_user.accounts
end

结果:

undefined method `accounts' for nil:NilClass

当我改为尝试登录时,相同的代码有效。

我的路线看起来像这样(as of) :

devise_for :users, :controllers => {:sessions  => 'sessions'}, :skip => [:registrations] do
delete '/logout', :to => 'sessions#destroy', :as => :destroy_user_session
get '/sign_in', :to => 'sessions#new', :as => :new_user_session
post '/sign_in', :to => 'sessions#create', :as => :user_session
end
devise_for :admins, :controllers => {:registrations => 'admins/registrations'}, :skip => :sessions do
get '/sign_up', :to => 'admins/registrations#new', :as => :new_admin
post '/sign_up', :to => 'admins/registrations#create', :as => :admin
end
devise_for :collaborators, :controllers => {:registrations => 'collaborators/registrations'}, :skip => :sessions

我还创建了一些我使用的辅助方法 (the same as of) :

# New Version using dynamic methods
%w(Collaborator Admin).each do |k|
define_method "current_#{k.underscore}" do
current_user if current_user.is_a?(k.constantize)
end

define_method "authenticate_#{k.underscore}!" do |opts={}|
send("current_#{k.underscore}") || not_authorized
end
end

def after_sign_in_path_for(resource)
if resource.is_a?(User)
accounts_path
else
super
end
end

def after_sign_up_path_for(resource)
accounts_path
end

有人知道是什么原因造成的吗?

最佳答案

我设法通过自定义 after_sign_up_path_for 来解决它,如下所示:

def after_sign_up_path_for(resource)
sign_in(resource)
accounts_path
end

如果有更好的方法,请告诉我。

关于ruby-on-rails - 当我创建新用户时设计 current_user 返回 nil,Rails 3.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10363193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com