2011-09-05 4 views
1

J'ai une vue qui a un bouton "J'aime" dessus. Avant d'afficher ce bouton, il vérifie si l'utilisateur l'a déjà aimé ou non. C'est le code pour ça comme "bouton".Problème avec la recherche de current_user

<% if current_user.can_like_photo?(@photo) %> 
    <%= link_to "Like", :controller => "likes", :action => 'create', :method => "post", :id => @photo.id %> 
<% else %> 
    <span class="caption">&check; Liked</span> 
<% end %> 

Cela fonctionne très bien; SI il y a un current_user. Cependant, si vous n'êtes pas connecté, il crache une exception car il n'y a pas de current_user. L'exception est interceptée avant le chargement de la page, pas lorsque le lien similaire est cliqué. Juste pour être clair. Ceci est ma méthode current_user dans mon application_helper:

def current_user 
    User.find(session[:user_id]) 
end 

Quelle est la meilleure façon de faire ce travail s'il n'y a pas current_user connecté?

Répondre

3
<% if current_user && current_user.can_like_photo?(@photo) %> 

Vous pouvez aussi avoir besoin de ce qui suit si elle est une exception ActiveRecord:

def current_user 
    User.find(session[:user_id]) 
rescue ActiveRecord::RecordNotFound 
    false 
end 
+0

Eh oui, cela a fonctionné pour moi. Je ne suis pas familier avec 'rescue' mais je vais le chercher. Merci! –

+0

La méthode find déclenchera une exception ActiveRecord :: RecordNotFound si l'enregistrement n'existe pas. le sauvetage attrape l'exception. Le faux est là car la dernière ligne exécutée est toujours retournée. S'il vous plaît voir mes modifications pour spécifier quelle exception vous attrapez. – Gazler

2
<% if logged_in? %> 
    <% if current_user.can_like_photo?(@photo) %> 
    <%= link_to "Like", :controller => "likes", :action => 'create', :method => "post", :id => @photo.id %> 
    <% else %> 
    <span class="caption">&check; Liked</span> 
    <% end %> 
<% end %> 

def logged_in? 
    params[:session_id].presence 
end 
+0

Merci @floor. J'ai essayé, mais «présence» n'a pas été reconnu. J'ai essayé 'present?' Qui a semblé fonctionner, excepté que le bouton semblable était alors parti pour les utilisateurs connectés aussi bien. Je pourrais essayer à l'avenir si j'ai besoin de plus de fonctionnalités. –

+0

Grattez cela. J'ai eu ce travail aussi. J'aurais aimé pouvoir accepter cette réponse, car les deux étaient nécessaires pour résoudre mon problème. –

+0

'présence?' => 'Présence' :) – fl00r

Questions connexes