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
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
@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
@grzuy vous avez raison. Merci de m'avoir pointé. – Voldy