【问题标题】:Too may redirects rails respond_to也可能重定向 rails respond_to
【发布时间】:2017-01-23 10:50:54
【问题描述】:

我有一个控制器操作方法,它可以从数据库中获取所有机构记录,然后我想与一个外部实体共享这个响应,它是一个 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>

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

【问题讨论】:

  • 我正在重定向到establishment_url,因为我想在搜索后去那里

标签: ruby-on-rails json respond-to


【解决方案1】:

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

原因

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

解决方案

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

format.html { render 'establishments/index' }

【讨论】:

  • 当我在 serach 之后单击返回时,我仍然得到 ActionController::UnknownFormat 文本
  • @Teebo 你可以尝试在 URL 中附加 .html 吗?
  • 非常感谢,但必须有更好的方法
  • @Teebo,是的,当然有。请参阅this post 了解设置rails 路线的默认格式。
猜你喜欢
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
相关资源
最近更新 更多