根据用户在注册期间选择的角色(例如,专家与新手),我想将他/她重定向到适当的页面。
我尝试覆盖ApplicationController
中的方法。还尝试覆盖我的自定义RegistrationsController
:
def after_sign_up_path_for(resource)
if current_user.role = 'xxx'
redirect_to path1
else
redirect_to path2
end
end
我也尝试过:
def after_sign_up_path_for(resource)
if current_user.role = 'xxx'
redirect_to path1
else
redirect_to path2
end
return
end
但该应用仍会重定向到默认root_path
。
答案 0 :(得分:2)
此处有devise documentation供您参考
看着它,我认为您必须使用resource
(您正在使用current_user
):
def after_sign_up_path_for(resource)
path = (resource.role == "xx") ? path1 : path2
redirect_to path
end
答案 1 :(得分:0)
这是我解决的方法,覆盖自定义控制器中的方法,更新routes.rb来映射它。
devise_for :users , :path=>'accounts', controllers: { registrations: "registration" }
控制器:
class RegistrationController < Devise::RegistrationsController
def after_sign_up_path_for(resource)
if current_user.role = 'xx'
new_expert_path
else
new_user_expertrequest
end
end
end
刚刚删除了redirect_to,因为父控制器按如下方式调用此方法并执行重定向
# POST /resource <Devise:RegistrationsController>
def create
xxxx
if resource_saved
if resource.active_for_authentication?
xxxx
respond_with resource, location: after_sign_up_path_for(resource)
else
xxx
else
xxxx
end
end