我需要进行API版本检查,因此我在我的控制器方法中实现了检查,如:
if request.header["api_version"] != 1
respond_to do |format|
format.json {render :json => expiredMessage}
end
return
end
工作正常,我在控制语句中返回,所以Rails不会抱怨双重渲染。我尝试将这些作为before_filter进入应用程序控制器方法,但后来我从Rails获得了多个渲染投诉。似乎范围已经改变,控制语句中的'return'不再从原始控制器方法返回?
我想知道如何从应用程序控制器方法执行渲染,或者如果有更好的方法可以实现此功能?谢谢!
答案 0 :(得分:3)
在每个控制器操作之前调用之前的过滤器,从中返回只允许该操作继续。我会使用例外。 (以下代码未经测试)
class FrontEndController < ApplicationController
rescue_from Exception do |exception|
if exception.is_a? ExpiredException
respond_to do |format|
format.json {render :json => expiredMessage}
return
end
end
end
before_filter :check_api_version
def check_api_version
raise ExpiredException if request.header["api_version"] != 1
end
end
class ExpiredException < Exception; end