RoR Catch Exception на уровне приложения - PullRequest
0 голосов
/ 30 июля 2009

Для конкретной роли (группы пользователей) я добавил: 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

Конечно, теперь он вызывает ActiveRecord :: ReadOnlyRecord Исключения в контроллере, передаваемые пользователю; не очень хорошо.

Могу ли я поймать этот тип ошибки в одном месте? Как в production.rb или в application.rb? Или я могу настроить конкретную страницу ошибки для этой ошибки?

1 Ответ

2 голосов
/ 30 июля 2009

Да, просто переопределите 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...