首页 > 解决方案 > 重写设计注册控制器以进行重定向

问题描述

设计功能需要定制并RegistrationsController创建。但是,创建操作的默认设置是

super do |resource|

end

当它进入超类时,它本身就是一个黑盒子。很明显是为重定向而连接的。因此:

super do |resource|
  [...]
  if @user.save?
    redirect_to some_user_attribute_path
  else
    redirect_to a_parameter_based_path
  end
end

是不可能的,因为它自然会创建一个

AbstractController::DoubleRenderError in Users::RegistrationsController#create

设计维基只处理成功的行动或包罗万象的方法。

避免使用 ApplicationController 方法是一个目标,因为此用例具有非常具体的行为,仅根据成功或失败创建用户(实际上返回到同一页面,但在失败的情况下,通过params[:company][:id]值定义替代@user.company_id

如何做到这一点?

标签: ruby-on-railsdevise

解决方案


我认为您应该完全覆盖该方法,因为您不希望yield. 所以,你可以这样做:

class RegistrationsController < Devise::RegistrationsController

  def create
    build_resource(sign_up_params)

    if resource.save?
      redirect_to some_user_attribute_path
    else
      redirect_to a_parameter_based_path
    end
  end
end

注意:如果您需要注册用户或任何其他设计的东西,您应该从原始方法复制它


推荐阅读