2010-07-01 5 views
2

J'ai défini une fonction appelée is_logged_in? dans une bibliothèque définie par l'utilisateur et stockée dans le répertoire/lib, mais lorsque J'essaie de l'utiliser dans une de mes vues (dans ce cas, une vue _menu.html.erb) J'ai une "méthode non définie` is_logged_in? " pour # "erreur. J'avais supposé que si la méthode était disponible dans le répertoire/lib, elle serait accessible via l'application?Ruby on Rails - accès aux fonctions lib définies par l'utilisateur dans /lib/login_system.rb à partir de app/views/layouts/_menu.rhtml

mon fichier login_system.rb est la suivante:

module LoginSystem 
    protected 

    def is_logged_in? 
    @logged_in_user = User.find(session[:user]) if session[:user] 
    end 

    def logged_in_user 
    return @logged_in_user if is_logged_in? 
    end 

    def logged_in_user=(user) 
    if !user.nil? 
     session[:user] = user.id 
     @logged_in_user = user 
    end 
    end 

    def self.included(base) 
    base.send :helper_method, :is_logged_in, :logged_in_user 
    end 
end 

et mon fichier _menu.html.erb est la suivante:

<ul> 
<li><%= link_to 'Home', '/' %></li> 
<li><%= link_to 'Edit Page', pages_path %></li> 

<li><hr size = "1" width = "90%" aligh = "left" /></li> 

<% if is_logged_in? %> 
    <li> Logged in as: <i><%= logged_in_user.username%> </i></li> 
    <li><%= link_to 'Logout',{:controller => 'account', :action => 'logout'}, :method => :post%> </li> 
<% else %> 
    <li><%= link_to 'Signup', :controller => 'users', :action => 'new' %> </li> 
    <li><%= link_to 'Login', :controller => 'account', :action => 'login' %></li> 
<% end %> 
</ul> 

point Quelqu'un peut-il où je l'ai mal tourné?

Bernard

+0

Woops, le fichier _menu est en fait un _menu.rhtml - NOT _menu.html.erb tel que spécifié ci-dessus. Vous ne savez pas si cela fait une différence? – mrbernz

+0

J'ai juste compris ... c'était une erreur de syntaxe STUPID dans mon fichier login_system.rb qui l'a fait échouer. J'ai oublié le? dans la déclaration suivante ... DEF self.included (base) base.send: helper_method,: is_logged_in,: logged_in_user fin nécessaire pour changer de def self.included (base) base.send: helper_method ,: is_logged_in ?,: logged_in_user end Gggrrr .... – mrbernz

Répondre

2

modifier votre ApplicationController:

class ApplicationController < ActionController::Base 
    include 'login_system' 
end 
+0

Mon contrôleur d'application en est déjà équipé. classe ApplicationController mrbernz

0

Vous pouvez également essayer devise. Si vous n'avez pas des besoins différents pour les comptes de connexion/déconnexion, c'est super!