重定向太多 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' }