我要devise
在用户注册后重定向到特定的控制器索引操作(或特定的页面)。
详细地说,我有一个具有2种注册方式的应用程序:client
和Professor
。实际上,这2种类型使用相同的注册页面,效果很好,但是当他们注册时,它们会自动重定向到同一页面...
所以,我想改变这种方式:
-当用户单击I want to become Professor
时,我要注册(全名,邮件,密码),并在注册后重定向到Professor
仪表板
-并且当用户单击Client
时,我最后要使用“相同方式”注册,但我想重定向到client's dashboard
。
所以,我开始更改devise.rb
来更改
config.allow_unconfirmed_access_for = 2.days (automatically login after sign_up)
在我的RegistrationsController
中,我将after_sign_up_path_for
覆盖为类似
def after_sign_up_path_for(resource)
if 'user is Prof'
redirect_path_professor
else
redirect_path_client
end
end
但是如果用户单击Prof.
或Client
,我该如何检查(处于状态)?它是相同的资源(注册)^^
谢谢
答案 0 :(得分:0)
为什么不只使用一个链接,而是让用户在注册视图中选择他的角色?
如果您确实希望为同一视图使用两个链接,则应在param中传递角色(链接link_to 'Becoming a Professor', new_registration_path(role: 'professor')
,然后在注册表单中添加一个带有param值的hidden_field。
= f.input :role, as: :hidden, input_html: { value: params[:role] }
但是请不要忘记验证参数的内容,以避免取笑用户发送的错误值
此外,after_sign_in_path_for(resource)
应该在application_controller中。您将需要在用户栏中指定角色,然后您的方法将如下所示:
def after_sign_in_path_for(resource)
stored_location_for(resource) || (resource.role.professor? ? professor_dashboard_url : user_dashboard_url(resource))
end