Rails中是否有任何用于处理异常的动作过滤器

时间:2014-03-13 08:40:09

标签: ruby-on-rails asp.net-mvc ruby-on-rails-3

之前我在使用asp.net mvc,现在我正在使用Ruby on Rails。

在asp.net mvc中我们使用动作过滤器来处理验证,我想知道在rails中是否也有相同的东西。

我想创建自定义验证类来处理业务验证,以便操作过滤器可以根据异常类型处理异常。

1 个答案:

答案 0 :(得分:3)

我对asp.net一点也不熟悉,可能会误解你的问题,但这里有一种方法可以处理在Controller的操作中可能发生的异常。

包含某些操作的通用控制器:

class SomethingController < ApplicationController
  def show
    @user = User.find_by_id(params[:user_id])
  end
end

请注意,SomethingController继承自此ApplicationController:

class ApplicationController < ActionController::Base
  rescue_from ActiveRecord::RecordNotFound do |exception|
    return render :json => {:status => 'error', :message => "given id does 
      not correlate to a record", :code => 404}
  end
end

因为SomethingController(以及大多数其他控制器)继承自ApplicationController,所以大多数异常处理程序都可以放在ApplicationController中。

现在实际的异常不会在控制器中生成,而是来自模型。在上面的示例中,假设我只有10个用户,ActiveRecord::RecordNotFound是一个异常,当User模型使用参数1000调用find_by_id方法时将调用该异常。没有用户id 1000,因此ActiveRecord::RecordNotFound异常将返回给调用控制器。 SomethingController不知道如何处理此操作,因此将引用其具有适当处理程序的父级。