之前我在使用asp.net mvc,现在我正在使用Ruby on Rails。
在asp.net mvc中我们使用动作过滤器来处理验证,我想知道在rails中是否也有相同的东西。
我想创建自定义验证类来处理业务验证,以便操作过滤器可以根据异常类型处理异常。
答案 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
不知道如何处理此操作,因此将引用其具有适当处理程序的父级。