ruby-on-rails - Rails : CanCanCan - AccessDenied error not displaying

标签 ruby-on-rails ruby error-handling cancan cancancan

我在我的rails应用程序中使用CanCanCan进行授权。路由和重定向工作正常,但我无法显示AccessDenied错误消息(以前曾起作用,但我在途中一定搞砸了,现在它不会显示)。

这是我的代码:

Controller /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 (根)
= flash[:error] if flash[:error]
...

关于如何使其重新工作的任何想法?提前致谢。

---编辑---

我尝试过的一些其他修复程序(均未成功):
  • errormessage替换notice
  • 完全删除rescue_from CanCan::AccessDenied方法-它使我进入标准的CanCan错误页面(所以我知道该方法本身正在工作)。
  • 用常规字符串替换exception.message
  • 在重定向之前添加一个puts语句-它会像期望的那样在控制台中打印。
  • 正如@Anand Shah在对此question的回答中所建议的那样,我在自己的 View 中添加了以下内容:

    - if flash[:error].blank?
    %p flash hash is blank



    哈希确实是空的,因此似乎根本没有保存闪存。然后我加了

    flash.keep(:error)



    在我的 Controller 中,但没有任何改变。

    最佳答案

    您是否通过专用浏览器尝试过以防Cookie困惑?

    可以尝试这种格式吗?

    redirect_to(root_url, {:flash => { :error => exception.message }})
    

    关于ruby-on-rails - Rails : CanCanCan - AccessDenied error not displaying,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50619472/

    相关文章:

    ruby-on-rails - Rails 没有使用我的全局 Ruby 版本

    Ruby IO.popen 带有 "-",幕后发生了什么?

    ruby - 消除 <head> 问题,我需要指导/帮助

    flutter - 如何通过 Sentry 发送设备信息

    PHP 自定义异常消息

    vb.net - 处理错误的更好方法

    ruby-on-rails - Docker - 无法转发交互式 shell 的端口

    ruby-on-rails - 带有 Rails 的 AJAX 设计表单不更新数据

    ruby-on-rails - 设计可确认 - 当用户尝试使用未经确认的电子邮件登录时,将用户重定向到自定义页面

    ruby-on-rails - Rails 控制台比较模型实例