不确定如何获得此错误:
AbstractController::DoubleRenderError users#create
当我在我的控制器中时,我得到了这段代码:
render 'new' and return
我从bugsnag得到了日志,说我在这一行得到了错误。
这是创建方法代码:
def create
back_button and return if params[:back_button]
@profile = current_user.build_profile(params[:user])
if @profile.nil? || current_user.nil? || @profile.user.nil?
sign_out
redirect_to signup_path and return
end
if @profile.new_record?
render 'new' and return
else
redirect_to more_questions_path and return
end
end
我在此控制器中进行过滤之前:
before_filter :signed_in_user
def signed_in_user
unless signed_in?
store_location
redirect_to signin_url, notice: "Please sign in."
end
end
答案 0 :(得分:12)
尝试一下:
class UsersController < ApplicationController
before_filter :signed_in_user
def create
return back_button if params[:back_button]
@profile = current_user.build_profile(params[:user])
if @profile.nil? || current_user.nil? || @profile.user.nil?
sign_out
return redirect_to signup_path
end
if @profile.new_record?
render 'new'
else
redirect_to more_questions_path
end
end
private
def signed_in_user
unless signed_in?
store_location
return redirect_to signin_url, notice: "Please sign in."
end
end
end
背后的原因:x and return
表示x and return nil
,因此返回nil
。实际上,您尝试将控制器操作短路,并return redirect_to ...
。
答案 1 :(得分:5)
并且没有为你做任何事。
在你拥有的每个地方
xxx and return
替换为
xxx
return
对于exameple:
redirect_to signup_path
return
这应该更像你期望的那样
答案 2 :(得分:2)
您有渲染和重定向。你必须选一个。
答案 3 :(得分:0)
我认为redirect_to signup_path
正在返回nil
或false
,因此您的and return
未被执行。
你可以解决这个问题,最简单的就是替换
redirect_to signup_path and return
通过
redirect_to signup_path
return
然而,我建议你做一个更大的改变。尝试更改此
if @profile.nil? || current_user.nil? || @profile.user.nil?
sign_out
redirect_to signup_path and return
end
if @profile.new_record?
render 'new' and return
else
redirect_to more_questions_path and return
end
通过
if @profile.nil? || current_user.nil? || @profile.user.nil?
sign_out
redirect_to signup_path
elsif @profile.new_record?
render 'new'
else
redirect_to more_questions_path
end
这样很明显,只能使用一条路径,而不依赖于返回。