我有一个控制器操作方法,可以从数据库中获取所有企业记录,然后我想与外部实体(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
当我导航到此操作时,我收到错误
净:: ERR_TOO_MANY_REDIRECTS
在控制台选项卡上的chrome developer工具中。
当我删除 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>
相反,当我刷新页面时,我得到了预期的视图。
答案 0 :(得分:1)
难怪它停留在重定向循环中。
<强>原因强>:
establishments_url
指向EstablishmentsController#index
,您的默认格式必须为html
。因此,在设置变量后,它会重定向到establishments_url
,再次尝试加载EstablishmentsController#index
。
<强>解决方案强>:
您需要考虑渲染视图(与JSON格式一样),而不是重定向到URL。
format.html { render 'establishments/index' }