CanCan:重定向时不显示异常消息

时间:2013-09-04 23:32:37

标签: ruby-on-rails cancan

我正在尝试让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例如,当我尝试转到具有以下权限的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页面,但不会显示“您未登录”消息。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

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

def index flash.keep other index action code end

答案 1 :(得分:0)

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

我在研究时提到了这个问题:flash notice is lost on redirect, how to find out what's removing it?