2010-10-05 8 views
2

Je suis en train de dépanner pourquoi les méthodes de mon ApplicationController ne semblent pas fonctionner dans ma zone admin et il semble que lorsque je suis dans un espace de noms je ne peux pas accéder aux méthodes privées de mon ApplicationController droite?Authlogic, Namespace et méthodes privées dans ApplicationController

Si tel est le cas, quelle est la meilleure pratique pour réutiliser quelque chose comme les exemples de méthodes ApplicationController d'Authlogic dans mon contrôleur à espaces de noms? Je pourrais facilement copier et coller les méthodes sur un AdminController ou quelque chose, et je pourrais également démasquer ces méthodes - mais cela ne semble pas être un bon moyen de le faire.

Voici ce que l'exemple ApplicationController de Authlogic (et le mien) ressemble à:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    helper_method :current_user_session, :current_user 

    private 
    def current_user_session 
     return @current_user_session if defined?(@current_user_session) 
     @current_user_session = UserSession.find 
    end 

    def current_user 
     return @current_user if defined?(@current_user) 
     @current_user = current_user_session && current_user_session.user 
    end 

    def require_user 
     unless current_user 
     store_location 
     flash[:notice] = "You must be logged in to access this page" 
     redirect_to new_user_session_url 
     return false 
     end 
    end 

    # and some more methods here... 

end 

Et voilà comment je hérite de lui dans mon espace de noms:

class Admin::DashboardController < ApplicationController 
    layout 'administration' 

    require_user # fails 

    def index 
    end 

end 

Merci pour votre aide,

Arne

Répondre

0

Je n'ai pas utilisé authlogic, mais peut-être que vous devez d pour changer

require_user 

à

before_filter :require_user 
1

Vous devez utiliser before_filter dans Admin :: DashboardController:

class Admin::DashboardController < ApplicationController 
    layout 'administration' 

    before_filter :require_user 

    def index 
    end 
end 
+0

est-il une bonne pratique de garder current_user comme méthode publique? Y a-t-il des risques associés à cela? J'imagine que l'un des didacticiels populaires les rend quelque peu privés, plutôt que publics, parce que j'ai découvert que j'avais aussi fait cette erreur. – Mittenchops

+0

@Voldy vous avez tort dans votre premier point. Ce n'est pas ainsi que fonctionne la visibilité de la méthode dans ruby. Ce tutoriel est faux. Vous pouvez accéder à une méthode privée depuis une sous-classe, essayez-la sur IRB. Dans ruby, privé signifie que vous ne pouvez pas utiliser un récepteur, accédez simplement à partir du contexte d'instance, qui inclut n'importe quel contexte d'instance de sous-classe. – grzuy

+0

@grzuy vous avez raison. Merci de m'avoir pointé. – Voldy

Questions connexes