10

我正在尝试通过 batman-rails gem 使用 node.js 框架 batman.js 运行 rails 应用程序。

当我在 Rails 控制器中使用 json 响应时,每次都会收到 406 错误,我不知道为什么。这是我的控制器:

  respond_to :json

  def index
    respond_with Sample.all
  end

无论如何,这给了我一个 406。我不认为这与蝙蝠侠有关,而是与轨道本身有关。但为了更好的衡量,这是我的蝙蝠侠代码:

  index: (params) ->
    TopNavTemplate.Sample.load (err) -> throw err if err
    @set 'samples', TopNavTemplate.Sample.get('all')

然后我的 index.html.erb 文件只写了“索引”,它还没有真正对蝙蝠侠做任何事情。

有很多 406 JSON 相关的问题,我还没有真正能够将它们应用于我的情况。我做错了什么让rails respond_with JSON?

4

1 回答 1

25

好吧,我做了一个非常简单的应用程序来检查你的情况:

SamplesController.rb

class SamplesController < ApplicationController
  respond_to :json

  def show
    respond_with Sample.find(params[:id])
  end

  def index
    respond_with Sample.all
  end
end

当我访问/samples.jsonandsamples/1.json时,它按预期工作。但是,当我转到/samplesand /samples/1(没有 .json 扩展名)时,我收到了 406 错误。

为了使 URL 在没有 .json 扩展名的情况下工作,您需要config/routes.rb按如下方式修改您的文件:

resources :samples, defaults: {format: :json}

否则,Rails 应用程序将尝试使用 HTML 响应来响应请求。

于 2012-09-07T17:26:53.590 回答