从应用程序控制器方法执行渲染

时间:2010-08-24 23:30:56

标签: ruby-on-rails

我需要进行API版本检查,因此我在我的控制器方法中实现了检查,如:

if request.header["api_version"] != 1
  respond_to do |format|
    format.json {render :json => expiredMessage}
  end
  return
end

工作正常,我在控制语句中返回,所以Rails不会抱怨双重渲染。我尝试将这些作为before_filter进入应用程序控制器方法,但后来我从Rails获得了多个渲染投诉。似乎范围已经改变,控制语句中的'return'不再从原始控制器方法返回?

我想知道如何从应用程序控制器方法执行渲染,或者如果有更好的方法可以实现此功能?谢谢!

1 个答案:

答案 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