加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 无法登录用户资源 – 设计/ sessionsControlle

发布时间:2020-12-17 02:52:17 所属栏目:百科 来源:网络整理
导读:我对Rails 3和Devise有一个特殊的问题.我的Rails应用程序有3种用户类型: 客户,所有者和管理员 routes.rb中: devise_for :admins devise_for :owners devise_for :clients application_controller.rb: def after_sign_in_path_for(resource) if resource =
我对Rails 3和Devise有一个特殊的问题.我的Rails应用程序有3种用户类型:
客户,所有者和管理员

routes.rb中:

devise_for :admins
   devise_for :owners
   devise_for :clients

application_controller.rb:

def after_sign_in_path_for(resource)
    if resource == "client"
        "/client_accounts/" + current_client.id.to_s
    elsif resource == "admin"
        stored_location_for(:admins) || "/admin/control_panel"
    elsif resource == "owner" 
        stored_location_for(:owners) || "/client_accounts"
    end
end

我的登录所有者和管理员工作正常,但我无法让客户登录工作..这是我得到的错误:

NoMethodError in Devise/sessionsController#create
undefined method `client_url' for #<Devise::SessionsController:0x10a98f868>

应用程序跟踪为空.

解决方法

根据 Devise docs,after_sign_in_path_for方法接受实际的Client对象,但是您将输入与一组字符串进行比较,这些字符串都将返回false,因此您的big if子句将返回nil.不确定Devise在发生这种情况时的设计目的是什么,但寻找’client_url’将是一个合理的默认值.

试试这个:

def after_sign_in_path_for(resource)
  case resource
    when Client then "/client_accounts/" + current_client.id.to_s
    when Admin  then stored_location_for(:admins) || "/admin/control_panel"
    when Owner  then stored_location_for(:owners) || "/client_accounts"
  end
end

如果这没有帮助,我会在方法的顶部放置一个调试器语句,以确保像’current_client’这样的帮助程序正在按预期运行(并确保完全调用after_sign_in_path_for).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读