用json响应时出错406

时间:2012-09-07 14:39:02

标签: ruby-on-rails ruby-on-rails-3 json batman.js

我正在尝试使用node.js框架batman.js通过batman-rails gem运行一个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 response_with JSON?

1 个答案:

答案 0 :(得分:24)

好吧,我制作了一个非常简单的应用来查看你的情况:

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.jsonsamples/1.json时,它按预期工作。但是,当我转到/samples/samples/1(没有.json扩展名)时,我收到了406错误。

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

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

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