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にリダイレクトします。たとえば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は、2 番目のリダイレクトを行う前に、中間コントローラーに a を追加する必要があります。

調査時にこの問題を参照しました。リダイレクト時にフラッシュ通知が失われます。何が削除されているのかを調べる方法は?

于 2013-09-26T21:34:29.663 に答える