Я использую CanCanCan в моем приложении rails для авторизации.Маршруты и перенаправления работают нормально, но мне не удается отобразить сообщение об ошибке AccessDenied (раньше это работало, но я, должно быть, что-то напутал на пути, а теперь просто не будет отображаться).
Вот мойкод:
controllers / application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
rescue_from CanCan::AccessDenied do |exception|
redirect_to root_url, error: exception.message
end
...
end
(я изменил значение по умолчанию :alert
на :error
, так как в противном случае я получал предупреждение отdevise ('Вы уже вошли в систему').
views / index.html.haml (root)
= flash[:error] if flash[:error]
...
Любые идеи о том, как его получитьработать снова? Заранее спасибо.
--- РЕДАКТИРОВАТЬ ---
Еще несколько исправлений, которые я пробовал (безуспешно):
Замена error
на message
и notice
Полное удаление метода rescue_from CanCan::AccessDenied
- это привело меня к стандартной странице ошибок CanCan (так что я знаюсам метод работает).
Замена exception.message
обычной строкой.
Добавление оператора put перед перенаправлениемn - он печатается в консоли, как и следовало ожидать.
Как подсказывает @Anand Shah в ответе на этот вопрос , я добавил следующее, на мой взгляд:
- если flash [: error] .blank?
% p флэш-хэш пуст
Хэш действительно пуст,кажется, что вспышка вообще не сохраняется.Затем я добавил
flash.keep (: ошибка)
в моем контроллере, но это ничего не изменило.