2013-11-28 50 views
1

目前沒有簽約,我在我的「秀」視圖問題模型<%如果current_user.id == @ status.user_id%>當用戶在

<% 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 %> 

任何人都可以建議重寫,以使其與訪客用戶一起工作嗎?

感謝

回答

4

爲什麼不這樣做<% if current_user == @question.user %>?拿出身份證。

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

+0

謝謝!兩者都完美無缺!和第二個一起去!乾杯! –

+1

或''如果current_user.try(:id)== @ question.user_id%>' – Stefan

0

使用此

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

'而''和'看起來更好,它的優先級低很多,並且會導致令人討厭的錯誤。 – sevenseacat

+0

它在這裏不是優先事項......如果我已經使用了兩者,那將會是一樣。 –

+0

此外''和'我做了短路,意味着如果沒有current_user –

1

在助手

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

然後在視圖

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

@BillyChan - 該要求,我將允許upvoting如果有人不無需創建未保存的用戶記錄。我可能希望使用cookie來阻止多人投票,但老實說,我可能會與客戶爭辯說,我們不應該讓人們無需登錄即可享受優惠。

+0

這是爲了評論下面的答案嗎? – sevenseacat

相關問題