也可以重定向rails respond_to

时间:2017-01-23 10:50:55

标签: ruby-on-rails json 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

当我导航到此操作时,我收到错误

  

净:: 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>

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

1 个答案:

答案 0 :(得分:1)

难怪它停留在重定向循环中。

<强>原因

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

<强>解决方案

您需要考虑渲染视图(与JSON格式一样),而不是重定向到URL。

format.html { render 'establishments/index' }