Schermata Red Rails invece del messaggio flash: CanCan::AccessDenied in RailsAdmin::MainController#dashboard
Uso Devise, CanCanCan e rails_admin. Con l'accessibilità va tutto bene, ma non riesco a ricevere un messaggio flash e reindirizzare a root_path e ottenere la schermata qui sotto. Qualche idea, suggerimento su come potrei ricevere un messaggio flash invece di questo? Altri messaggi flash, sia avvisi che notifiche, visualizzano OK. Molte grazie.

Il mio ApplicationController è:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_user!
def after_sign_in_path_for(resource)
stored_location_for(resource) || welcome_path_url
end
rescue_from CanCan::AccessDenied do |exception|
respond_to do |format|
format.json { head :forbidden, content_type: 'text/html' }
format.html { redirect_to main_app.root_url, notice: exception.message }
format.js { head :forbidden, content_type: 'text/html' }
end
end
end
rails_admin.rb
RailsAdmin.config do |config|
### Popular gems integration
## == Devise ==
config.authenticate_with do
warden.authenticate! scope: :user
end
config.current_user_method(&:current_user)
## == CancanCan ==
# config.authorize_with :cancancan
config.authorize_with do
redirect_to main_app.root_path unless current_user.superuser ==true
end
<....>
end
capacità.rb
class Ability
include CanCan::Ability
def initialize(user)
# Define abilities for the passed in user here. For example:
#
user ||= User.new # guest user (not logged in)
if user.superuser?
can :manage, :all
cannot :access, :rails_admin
cannot :manage, :dashboard
end
if user.office?
cannot :access, :rails_admin
cannot :manage, :dashboard
can :read, :all
end
end
end
EDIT: la risposta funzionante è contrassegnata. Inoltre dovrei definire la variabile di stato in questo modo:
def status
@user_role ||= User.new(read_attribute(:user_role))
end
nel mio User
modello
Risposte
Sembra RailsAdmin::MainController
che non sia derivato da ApplicationController che hai definito sull'app per catturare le eccezioni sollevate nella sua sottoclasse.
È necessario aggiungere in modo esplicito la configurazione per utilizzare un altro controller principale come di seguito. Si prega di trovare la relativa documentazione gemma qui :
# in config/initializers/rails_admin.rb
config.parent_controller = 'ApplicationController'
Anche questa risposta di overflow dello stack potrebbe aiutarti.