使用渲染后如何停止控制器执行? (在 Rails 上使用 Ruby)
How do I stop controller execution after using render? (Using Ruby on Rails)
我有这个方法:
def index
urls = parse_urls(params[:urls])
responses = Parallel.map (urls) do |url|
begin
get url
rescue RestClient::Exception
case params[:errors]
when 'fail_any'
render :json => fail_any
when 'replace'
replace
else
render :json => { :error => 'UNKNOWN_ERROR_TYPE'},status: 400
end
{:result=>'failed'}
end
end
但是我想在渲染后停止控制器的执行。
我尝试在渲染后添加中断,但收到一条错误消息
Parallel::DeadWorker
Marshal.load(read)
rescue EOFError
raise DeadWorker
end
raise result.exception if ExceptionWrapper === result
result
使用:return
:
return render :json => fail_any
或者,在 render :json ...
行之后使用 return
,例如:
render :json => fail_any
return
更新:
render :text => "No Data" and return if some_condition
或者,如果您确定要在此时停止控制器执行,只需 render and return
:
render :text => "No Data" and return
这确保执行在遇到语句后停止,并且在操作代码中不再发生流程,因为它看到 return.
Render and Return 上的这篇文章可能会有用。
使用线程代替进程(默认选项)解决的问题
responses = Parallel.map(urls, :in_threads => 3) do |url|
我有这个方法:
def index
urls = parse_urls(params[:urls])
responses = Parallel.map (urls) do |url|
begin
get url
rescue RestClient::Exception
case params[:errors]
when 'fail_any'
render :json => fail_any
when 'replace'
replace
else
render :json => { :error => 'UNKNOWN_ERROR_TYPE'},status: 400
end
{:result=>'failed'}
end
end
但是我想在渲染后停止控制器的执行。 我尝试在渲染后添加中断,但收到一条错误消息
Parallel::DeadWorker
Marshal.load(read)
rescue EOFError
raise DeadWorker
end
raise result.exception if ExceptionWrapper === result
result
使用:return
:
return render :json => fail_any
或者,在 render :json ...
行之后使用 return
,例如:
render :json => fail_any
return
更新:
render :text => "No Data" and return if some_condition
或者,如果您确定要在此时停止控制器执行,只需 render and return
:
render :text => "No Data" and return
这确保执行在遇到语句后停止,并且在操作代码中不再发生流程,因为它看到 return.
Render and Return 上的这篇文章可能会有用。
使用线程代替进程(默认选项)解决的问题
responses = Parallel.map(urls, :in_threads => 3) do |url|