我有一个视图,上面有一个“赞”按钮。在显示类似按钮之前,它会检查用户是否已经喜欢它。这就是“按钮”的代码。
<% if current_user.can_like_photo?(@photo) %>
<%= link_to "Like", :controller => "likes", :action => 'create', :method => "post", :id => @photo.id %>
<% else %>
<span class="caption">✓ Liked</span>
<% end %>
这很好用; IF 有一个current_user
。但是,如果您未登录,则会因为没有current_user
而吐出异常。在页面加载之前捕获异常,而不是在单击类似链接时捕获;只是为了清楚。这是我的application_helper中的current_user
方法:
def current_user
User.find(session[:user_id])
end
如果没有current_user
登录,最好的方法是什么?
答案 0 :(得分:3)
<% if current_user && current_user.can_like_photo?(@photo) %>
如果它是ActiveRecord异常,您可能还需要以下内容:
def current_user
User.find(session[:user_id])
rescue ActiveRecord::RecordNotFound
false
end
答案 1 :(得分: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">✓ Liked</span>
<% end %>
<% end %>
其中
def logged_in?
params[:session_id].presence
end