重定向太多 rails respond_to
Too may redirects rails respond_to
我有一个控制器操作方法,可以从数据库中获取所有机构记录,然后我想与外部实体(一个 RhoMobile 应用程序)共享此响应,我使用 respond_to 将响应格式化为JSON.
def index
@establishments = Establishment.index(params).includes(:assessor)
@json_establishments = Establishment.all
respond_to do |format|
format.html { redirect_to(establishments_url) }
format.json { render json: @json_establishments.as_json }
end
end
当我导航到此操作时出现错误
net::ERR_TOO_MANY_REDIRECTS
在 chrome 控制台选项卡上的开发人员工具中。
当我删除 format.html 旁边的 { redirect_to(establishments_url) }
时,它的工作状态为 406(不可接受) 但如果我在我创建的操作视图中使用搜索并单击浏览器后退按钮,我会得到类似:
ActionController::UnknownFormat in EstablishmentsController#index
ActionController::UnknownFormat
<div class="source hidden" id="frame-source-0">
<div class="info">
Extracted source (around line <strong>#219</strong>):
</div>
相反,当我刷新页面时,我得到了预期的视图。
难怪卡在重定向循环中了
原因:
establishments_url
指向 EstablishmentsController#index
,您的默认格式必须是 html
。因此,在设置变量后,它重定向到 establishments_url
,它再次尝试加载 EstablishmentsController#index
.
解决方法:
而不是重定向到 URL,您需要考虑渲染视图(就像您在 JSON 格式中所做的那样)。
format.html { render 'establishments/index' }
我有一个控制器操作方法,可以从数据库中获取所有机构记录,然后我想与外部实体(一个 RhoMobile 应用程序)共享此响应,我使用 respond_to 将响应格式化为JSON.
def index
@establishments = Establishment.index(params).includes(:assessor)
@json_establishments = Establishment.all
respond_to do |format|
format.html { redirect_to(establishments_url) }
format.json { render json: @json_establishments.as_json }
end
end
当我导航到此操作时出现错误
net::ERR_TOO_MANY_REDIRECTS
在 chrome 控制台选项卡上的开发人员工具中。
当我删除 format.html 旁边的 { redirect_to(establishments_url) }
时,它的工作状态为 406(不可接受) 但如果我在我创建的操作视图中使用搜索并单击浏览器后退按钮,我会得到类似:
ActionController::UnknownFormat in EstablishmentsController#index ActionController::UnknownFormat <div class="source hidden" id="frame-source-0"> <div class="info"> Extracted source (around line <strong>#219</strong>): </div>
相反,当我刷新页面时,我得到了预期的视图。
难怪卡在重定向循环中了
原因:
establishments_url
指向 EstablishmentsController#index
,您的默认格式必须是 html
。因此,在设置变量后,它重定向到 establishments_url
,它再次尝试加载 EstablishmentsController#index
.
解决方法:
而不是重定向到 URL,您需要考虑渲染视图(就像您在 JSON 格式中所做的那样)。
format.html { render 'establishments/index' }