在Devise gem中设置自定义after_sign_up_path_for

时间:2014-04-18 20:19:05

标签: ruby-on-rails ruby authentication devise

根据用户在注册期间选择的角色(例如,专家与新手),我想将他/她重定向到适当的页面。

我尝试覆盖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

2 个答案:

答案 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