Rails 3.1:JSON格式的持久“模板丢失”

时间:2012-09-01 02:13:49

标签: ruby-on-rails ruby-on-rails-3

我遇到的问题与the one mentioned in this question非常相似。但是,答案中描述的解决方案都没有起作用。

尝试访问我的路由时,无论是否有.json扩展名,以及jQuery $.ajax$.getJSON(使用正确的Accept标头),我都会收到以下异常:

  

缺少模板用户/事件/索引,应用程序/索引{:handlers => [:erb,:builder,:coffee,:haml] ,: formats => [:json],:locale => [:en,:en]}。

由于我只需要这个控制器的JSON响应,我没有也不想要这个控制器的任何模板。

我的控制器定义如下:

class Users::EventsController < ApplicationController

  respond_to(:json)

  def index
    # Some extra code here...
    respond_with(@data)
  end
end

使用这些路线(在“用户”范围内):

resources(:events, :only => [:index, :show]) do
  collection do
    get ':year/:month', :to => 'events#index', :format => :json
  end
end

添加do |format|块并明确将其呈现为JSON时,问题仍然存在。

在Rails 3.1.1和3.2上都尝试过这个问题并得到同样的问题。

它看起来像服务器端问题,因为使用“.json”访问不起作用。我错过了什么?

2 个答案:

答案 0 :(得分:1)

经过一些修修补补后,我发现了这个问题的真正原因。

在控制器的某个时刻,我有以下代码块:

@array.map { |a| return a['id'] }

错误地使用了return关键字并导致整个操作提前返回,从而导致问题。

答案 1 :(得分:0)

当通过JSON发出密码重置请求时,我们遇到了与自定义Devise控制器类似的问题(确保也正确使用CSRF)。

有问题的代码

responds_to :json => [:create, :our_custom_method1, :our_custom_method2]

工作代码

responds_to :json

对允许更多路由接受JSON的安全方面不满意,但我们稍后会将其锁定。