У меня есть этот ApplicationController:
class ApplicationController < ActionController::Base
before_filter :class_breadcrumb
end
Я требую, чтобы каждый контроллер определял свой собственный метод class_breadcrumb(). И я хотел бы показать сообщение, не вызывая исключения, если этот метод не существует. Наконец, я хочу, чтобы все остальные исключения возвращались к стандартной странице xml 500.
Я чувствовал, что с этим блоком Rescue_from будет довольно просто справиться:
rescue_from "NameError" do |e|
if e.to_s.include?('class_breadcrumb')
flash.now["alert-danger"] = "You didn't provide a breadcrumb for #{request.fullpath}! Please send us a feedback including this message!"
render params[:action]
else
# default behavior
render :xml => e, :status => 500
end
end
И это работает! Но когда внутри контроллера возникает какое-либо другое исключение... предположим, я вызываю неопределенный метод следующим образом:
<%= undefined_method_that_raise_an_exception %>
Я вижу пустую страницу с этим сообщением:
Внутренняя ошибка сервера
нет неявного преобразования NameError в String
Что не так с моим кодом?