0

我有一个控制器操作方法,可以从数据库中获取所有机构记录,然后我想与一个外部实体共享这个响应,它是一个 RhoMobile 应用程序,我使用 response_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 开发人员工具中。

当我删除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>

相反,当我刷新页面时,我得到了预期的视图。

4

1 回答 1

1

难怪它卡在重定向循环中。

原因

establishments_url指向EstablishmentsController#index,并且您的默认格式必须是html. 因此,在设置变量后,它会重定向到establishments_url,再次尝试加载EstablishmentsController#index

解决方案

您需要考虑渲染视图(就像您在 JSON 格式中所做的那样),而不是重定向到 URL。

format.html { render 'establishments/index' }
于 2017-01-23T11:04:15.543 回答