LINUX.ORG.RU

где находится список типов исключений?

 


0

1

помогите пожалуйста найти в официальной документации список типов исключений.

я написал такой экшен:

def show
  begin
    @user = User.find(params[:id])   
  rescue ActiveRecord::RecordNotFound => e
    logger.debug e
    logger.debug "Error #{$!}"
    render_404      
  end
end

мне нужно использовать несколько видов исключений:

def show
  begin
    @user = User.find(params[:id])   
  rescue ActiveRecord::RecordNotFound => e
    logger.debug e
    logger.debug "Error #{$!}"
    render_404  
  rescue anotherExceptionType1 => e   
    ......
    ......
    ..... 
  rescue anotherExceptionType2 => e   
    ......
    ......
    ..... 
  rescue anotherExceptionType3 => e   
    ......
    ......
    .....         
  end
end

но я не нашёл в документации список типов исключений.

самое близкое что я нашёл это http://ruby-doc.org/core-2.2.2/Exception.html но здесь нет типа, который я использовал выше

ActiveRecord::RecordNotFound
хотелось бы найти полный список всех возможных типов исключений


Немного не по теме: может лучше использовать User.find_by_id(params[:id]), и проверять результат на nil?

хотелось бы найти полный список всех возможных типов исключений

тут посмотри

neversleep ★★
()

Тебе не надо проверять все возможные типы исключений, достаточно того, который ты ожидаешь (например, ActiveRecord::RecordNotFound) и общего Exception (или даже Object, если у тебя в либах быдлокод почему-то кидает нечто, не унаследованное от Exception или RuntimeError).

INFOMAN ★★★★★
()
Ответ на: комментарий от neversleep

это хорошее отклонение от темы. тогда я продолжу его

допустим, ваше выражение вернёт результат или nil. но мое выражение тоже возвращает или результат или nil. в чём разница? почему выгоднее использовать предложенное вами?

prozaik
() автор топика
Ответ на: комментарий от prozaik

1. исключения работают существенно медленней условий 2. ловить ActiveRecord::NotFound не ну нужно, т.к. рельсы сами могут перенаправить на страницу 404

frozfox
()
Ответ на: комментарий от prozaik

find() вызовет исключение, find_by_id() нет.

Почему выгоднее? Это зависит от конкретной задачи, что касается приведённого вами примера - я предложил вам рассмотреть еще один способ решения, который, на мой взгляд, выглядит проще и лаконичней.

before_action :set_user, only: [:show]

def show
  # тут какие-то дейстивия с @user
end

private

def set_user
  @user = User.find_by_id(params[:id])
  render_404 unless @user
end
neversleep ★★
()

хотелось бы найти полный список .. исключений

Кстати, да. Программеры могут сами создавать новые классы исключений (в том числе рельсо-программеры), поэтому полного списка исключений наверное в одной документации не найти.

Novator ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.