我正在尝试让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
页面,但不会显示“您未登录”消息。
感谢您的帮助!
答案 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?