Как отловить аргумент «Ошибка» вways.rb - PullRequest
2 голосов
/ 26 октября 2011

В приложении RAils в файле rout.rb мы маршрутизируем некоторые устаревшие URL-адреса, например:

get "downloads/item/:slug", :to => redirect {|params| "/downloads/#{params[:slug].gsub('.', '')}"}, :constraints => { :slug => /[^\/]+/ }

Однако проблема в том, что некоторые из этих устаревших URL-адресов содержат не кодируемые символы, например, многоточие, которое прерывает команду gsub с ошибкой:

NilClass # (ArgumentError) "недопустимая последовательность байтов в UTF-8"

Мой вопрос: как мне перехватить это исключение и, следовательно, другие исключения, как в моем файле rout.rb? Я предполагаю, что это отличается от наличия «универсального» в конце файла для маршрутизации на 404.

1 Ответ

2 голосов
/ 26 октября 2011

Если ошибка происходит внутри блока, вы можете использовать begin..rescue

get "downloads/item/:slug", :to => redirect {|params|
  begin
    "/downloads/#{params[:slug].gsub('.', '')}"
  rescue ArgumentError
    "/"
  end
}, :constraints => { :slug => /[^\/]+/ }

Подробнее: http://ruby -doc.org / docs / ProgrammingRuby / html / tut_exceptions.html

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