0

当我重定向到正确的页面时,我试图让 CanCan 显示异常消息。我正在按照以下application_controller代码处理我的异常:

rescue_from CanCan::AccessDenied do |exception|
  if current_user # probably not an admin
    redirect_to dashboard_index_path, :notice => exception.message
  else
    redirect_to hello_login_path, :notice=> exception.message
  end
end

但是,当我以用户身份注销(这会触发上述页面的 else 部分)然后尝试访问一个页面时,我不应该有权访问它只是将我重定向到 hello_login_path 而不显示异常消息。Par example,当我尝试转到dashboard#index具有以下权限的 时:

class DashboardController < ApplicationController
  def index
    #we want to list out all the the projects

    @projects = Project.all
    authorize! :read, @projects, :message => 'You are not logged in'


    @entries = Entry.all
    authorize! :read, @entries, :message => 'You are not logged in'

    @users = User.all
    authorize! :read, @users, :message => 'You are not logged in'
    #@entries = Entry.where(:user_id => params[:user_id])
    #authorize! :read, @entries

  end
end

它有效地将我重定向到该hello#login页面,但不显示“您未登录”消息。

谢谢你的帮助!

4

2 回答 2

1

@steakchaser 的答案为我解决了这个问题。如果它也解决了你的问题,你应该接受他的回答。添加flash.keep到重定向到时命中的控制器操作root_path将保留原始闪存消息。所以,如果你的家庭控制器的index方法被击中,你会添加:

def index flash.keep other index action code end

于 2016-02-08T21:09:00.390 回答
0

我遇到了同样的问题,结果是因为我的 root_path / url 要去另一个控制器,然后这个控制器正在做另一个重定向。如果您有相同的设置,您将需要flash.keep在中间控制器中添加一个,然后再进行第二次重定向。

我在研究时引用了这个问题:flash notice is lost on redirect, how to find what's remove it?

于 2013-09-26T21:34:29.663 回答