我如何使用Rails和Devise重定向到不同的注销路径

我正在使用rails3和gem devise,我有两个角色管理员和客户,我想要用户之后

注销管理员应该重定向到不同的路径,客户应该重定向到不同的路径

退出时……

您可以在sign_out路径后使用设计方法获得所需的function。

但在应用程序助手中定义这些方法之前。

def is_admin?(user) admin_role = Role.find(:first, :conditions => ["name = ?", "admin"]) return user.roles.include?(admin_role) end def is_customer?(user) admin_role = Role.find(:first, :conditions => ["name = ?", "customer"]) return user.roles.include?(admin_role) end 

之后,在应用程序控制器中包含应用程序帮助程序并定义此方法

 def after_sign_out_path_for(resource_or_scope) if is_admin?(current_user) home_path = "/admin/users/sign_in" elsif is_customer?(current_user) home_path = "/customer" end respond_to?(home_path, true) ? send(root_path) : home_path 

结束

希望它能正常工作!!!

您可以覆盖设计使用的after_sign_out_path_for(resource)方法。 在检查用户在方法中的角色后,只需提及逻辑或仅提及所需的重定向路径。 设计会话的销毁操作通过此方法调用重定向路径。

 def after_sign_out_path_for(resource) #logic end 

希望这有用..

Devise README介绍了如何设置自定义路由和控制器。 简而言之,您需要为每个模型自定义路线,例如:

 devise_for :admins, :controllers => { :sessions => "admins/sessions" } devise_for :customers, :controllers => { :sessions => "customers/sessions" } 

然后创建相应的控制器并覆盖Devise::SessionsController#destroy ,例如:

 class Admins::SessionsController < Devise::SessionsController def destroy super redirect_to ... end end