我遇到的问题与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”访问不起作用。我错过了什么?
答案 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的安全方面不满意,但我们稍后会将其锁定。