2011-09-05 123 views
1

我有一个视图上有一个“赞”按钮。在它显示像按钮之前,它会检查用户是否已经喜欢它。这是“按钮”的代码。问题与检查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 %> 

这工作正常; IF有一个current_user。但是,如果你没有登录,它会吐出一个异常,因为没有current_user。在页面加载之前捕获异常,而不是单击类似的链接;只是要清楚。这是我current_user方法在我application_helper:

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

是什么使这项工作如果没有current_user登录的最佳方式?

回答

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

您可能还需要以下,如果它是一个ActiveRecord例外:

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

啊,这为我工作。我不熟悉“救援”,但我会查找它。谢谢! –

+0

如果记录不存在,find方法将引发ActiveRecord :: RecordNotFound异常。救援发现异常。由于执行的最后一行总是返回,所以出现错误。请参阅我的编辑以指定您正在捕捉的异常。 – 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

谢谢@floor。我放弃了这个,但是“存在?”没有被识别。我尝试了'礼物?',似乎工作,除了像登录用户一样的按钮然后。如果我需要更多的功能,我可能会在未来尝试这种方式。 –

+0

划痕。我也得到了这个工作。我希望我也能接受这个答案,因为他们都需要完全解决我的问题。 –

+0

'presence?'=>'presence' :) – fl00r