當我嘗試訪問包含已在數據庫中刪除的用戶評論的帖子時,出現錯誤undefined method 'email' for nil:NilClass
。如果用戶不存在,請刪除評論Ruby on Rails
我想知道:我該如何刪除那些不再存在的用戶創建的評論?
我想是這樣的
<%= div_for(comment) do %>
<% if comment.user.email.nil?%>
<% comment.destroy %>
<%else%>
<p><%= comment.body %></p>
<p class="comment-submitted-by"><%= time_ago_in_words(comment.created_at) %> ago by
<%= comment.user.email %></p>
<%end%>
,但我仍然得到錯誤。
很好的答案,這解決了很多問題,我! 我有一個後續問題。在我的應用程序中,我有一個用戶模型,鏈接和評論。用戶has_many:鏈接,鏈接has_many:評論。 如果用戶評論了不是他的鏈接,然後他刪除了他的帳戶,該怎麼辦?那麼在我的情況下,他的鏈接就會消失,但看起來他的評論是否會保持。我應該在鏈接模型中添加什麼,以便該用戶對該鏈接的評論也被破壞? 對不起,如果我沒有任何意義。 – Flux
如果用戶可以評論其他用戶的鏈接,我認爲'Comment'有'link_id,user_id',所以'User#has_many:comments,dependent :: destroy'應該清除他們的評論,而不會影響其他用戶的鏈接。還要刪除被銷燬的用戶鏈接:User#has_many:links,dependent :: destroy',並在鏈接被銷燬時清理註釋,鏈接#has_many:comments,dependent :: destroy'。基本上,將':dependent'添加到需要清理的任何關聯中。 –
@Kristján'評論.find_each {| c | c.destroy如果c.user.nil?}'得到N + 1個查詢問題,應該是'Comment.joins('LEFT OUTER JOIN users on comments.user_id = users.id')。其中(users:{id:nil})。destroy_all' –