应用程序级别的RoR Catch异常

时间:2009-07-30 16:57:52

标签: ruby-on-rails error-handling

对于特定角色(用户组),我将:readonly添加到活动记录中的每个查找

  def self.find(*args)
     if User.current_user.has_role? 'i_can_only_read'
        with_scope({:find => {:readonly => true}}) do
           result = super *args
        end
     end
  end

当然它现在引发了Controller中的ActiveRecord :: ReadOnlyRecord Exceptions传递给用户;不是很好。

我可以在一个地方发现这种错误吗?就像在production.rb或application.rb中一样?或者我可以为此错误配置特定的错误页面吗?

1 个答案:

答案 0 :(得分:2)

是的,只需像这样覆盖rescue_action_in_public:

class ApplicationController < ActionController::Base
...

  def rescue_action_in_public(exception)
    case exception
      when ActiveRecord::ReadOnlyRecord
        # DO SOME LOGIC HERE
      end
    end
  end
end

这将在“生产”中执行您的操作,但是当您处于“开发”状态时,会为您留下信息性的堆栈跟踪。

Rails还有许多其他的rescue_action_ *方法可能更适合您的问题......请查看http://api.rubyonrails.org/classes/ActionController/Rescue.html