<%if current_user.id == @ status.user_id%>当用户未登录时

时间:2013-11-28 08:36:06

标签: ruby-on-rails ruby postgresql

目前,我的“展示”视图中有一个问题模型

    <% if current_user.id ==  @question.user_id %>
        <%= link_to 'Edit', edit_question_path(@question) %>
    <% else %>

    <% end %>

允许创建问题的用户对其进行编辑。这在用户登录时工作正常。

但是,如果访客未登录。我收到此错误:

NoMethodError in Questions#show
undefined method `id' for nil:NilClass

似乎不喜欢这一行

 <% if current_user.id ==  @question.user_id %>

任何人都可以建议重写以使其与访客用户一起使用吗?

由于

5 个答案:

答案 0 :(得分:4)

为什么不做<% if current_user == @question.user %>之类的事情?取出ID。

或者,如果你真的想要ID。像<% if current_user.present? && current_user.id == @question.user_id %>

这样的东西

答案 1 :(得分:1)

帮助

def current_user?(user)
  current_user && current_user == user
end

然后在视图中

<% if current_user?(@question.user) %>

答案 2 :(得分:0)

使用此

<% if current_user.present? && current_user.id ==  @question.user_id %>

答案 3 :(得分:0)

如果用户不在数据库中,则不能拥有user.id。有一个很好的截屏视频:http://railscasts.com/episodes/393-guest-user-record?view=asciicast

答案 4 :(得分:0)

@BillyChan - 对于该要求,如果有人未登录,我将允许upvoting。无需创建未保存的用户记录。我可能想用cookie来阻止人们进行多方投票,但说实话,我可能会与客户争辩说,我们不应该让人们在没有登录的情况下进行投票。