检查current_user时出现问题

时间:2011-09-05 20:44:33

标签: ruby-on-rails authentication

我有一个视图,上面有一个“赞”按钮。在显示类似按钮之前,它会检查用户是否已经喜欢它。这就是“按钮”的代码。

<% 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而吐出异常。在页面加载之前捕获异常,而不是在单击类似链接时捕获;只是为了清楚。这是我的application_helper中的current_user方法:

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

如果没有current_user登录,最好的方法是什么?

2 个答案:

答案 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">&check; Liked</span>
  <% end %>
<% end %>

其中

def logged_in?
  params[:session_id].presence
end