ruby-on-rails - 重写设计注册控制器以进行重定向
问题描述
设计功能需要定制并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
如何做到这一点?
解决方案
我认为您应该完全覆盖该方法,因为您不希望在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
注意:如果您需要注册用户或任何其他设计的东西,您应该从原始方法复制它
推荐阅读
- version-control - 如何在两台不同的 PC 上处理 Visual Basic 6.0 项目?
- c++ - 如何获取从无关信号传递到插槽的值?
- c - 在参数列表中声明的“结构记录”[默认启用]
- python - 如何使用 Beautifulsoup 访问没有任何名称的 HTML 表格
- html - 为什么当您使用 position:relative 在 div 高度时,百分比不起作用?
- esp32 - 读取 esp32 的引脚 2 时出现触摸板错误
- python - 如何在 GPU 集群(多 GPU)上训练 CNN?
- javascript - 给定数组,创建函数和新数组
- matlab - Matlab移动平均线
- python - 是否可以在 postgresql 中不提交而获取插入 ID