Ruby on rails 轨道5-“;在此操作中多次调用渲染和/或重定向”;

Ruby on rails 轨道5-“;在此操作中多次调用渲染和/或重定向”;,ruby-on-rails,ruby,redirect,controller,ruby-on-rails-5,Ruby On Rails,Ruby,Redirect,Controller,Ruby On Rails 5,更新到Rails 5.0后,我发现以下错误: “AbstractController::RegistrationController中的DoubleRenderError#创建 在此操作中多次调用了Render和/或redirect。请注意,您只能调用Render或redirect,每个操作最多只能调用一次。还要注意,redirect和Render都不会终止操作的执行,因此,如果您想在重定向后退出操作,则需要执行类似于“reditect_to(…)并返回”的操作 这是我的代码,它在我的更新之前工

更新到Rails 5.0后,我发现以下错误:

“AbstractController::RegistrationController中的DoubleRenderError#创建

在此操作中多次调用了Render和/或redirect。请注意,您只能调用Render或redirect,每个操作最多只能调用一次。还要注意,redirect和Render都不会终止操作的执行,因此,如果您想在重定向后退出操作,则需要执行类似于“reditect_to(…)并返回”的操作

这是我的代码,它在我的更新之前工作:

def create
  # save record
  if params[:stuff].nil?
    respond_to do |format|
      format.js
    end
  else
    redirect_to root_path
  end
end
我尝试了很多不同的语法,例如:

redirect_to(root_path) and return

redirect_to(root_path)
return

return and redirect_to(root_path)

return redirect_to(root_path)

但所有操作都返回相同的错误。有人知道正确的语法吗?

您可能在显示
#save record
的地方进行了渲染或重定向

试试这个:

  • gembyebug
    添加到gem文件中(如果尚未安装),运行
    bundle
    安装它,然后重新启动Rails
  • byebug
    添加到
    create
    方法的开头
  • 从浏览器或命令行调用create,并使用
    n
    s
    单步执行它以进入其他功能。您可能会注意到渲染或重定向被调用了两次

您可以使用来测试或调试双渲染/重定向。

您的操作中是否有其他
重定向到
渲染
?试试看:
return redirect\u to(root\u path)
@Gerry我添加了完整的操作。该代码也不起作用。由于没有其他
重定向到
渲染
存在,我还建议使用
byebug
来定位代码调用第二次渲染的位置。在我的操作中,我没有使用任何其他
渲染
重定向到
的实例。