2016-02-15 20 views
0

如何刪除與已停用用戶相關的所有帖子?我目前使用此代碼:使用devise刪除與已停用用戶相關的所有帖子

<% @questions.each do |question| %> 
<div class="pad"> 
    <div class="forum-question"> 
     <p><%= link_to question.title, question %> 
     <br/><span class="pull-right"><%= time_ago_in_words(question.created_at) %> ago, by 
     <%= question.user.username %> 
<% end %> 

但問題是,如果用戶決定取消他的帳戶,環路將失敗,因爲我顯示用戶的用戶名會導致不確定的錯誤。爲了避免得到它而開發的應用程序,我這樣做,而不是:

<% @questions.each do |question| %> 
    <div class="pad"> 
     <div class="forum-question"> 
      <p><%= link_to question.title, question %> 
      <br/><span class="pull-right"><%= time_ago_in_words(question.created_at) %> ago, by 
      <% if @user.blank? %> 
       deleted user 
      <% else %> 
      <%= question.user.username %> 
      <% end %></span></p> 
     </div> 
    </div> 
    <% end %> 

有沒有寫一個聲明,如果刪除所有用戶帖子的方式,當他們按「取消我的帳戶」按鈕?

回答

0

你可以做下面的方法,請創建路線。如果需要,用必要的更改替換方法名稱,current_user.id只能在您使用Devise gem時使用,或者用當前用戶的ID替換。我假設你有一個用戶有很多文章協會,如果是的話,

鑑於文件,

<%= link_to "Delete my account", delete_posts_path(current_user.id) %> 

在控制器,

def delete_posts 
     user_id = params[:id] 
     user = User.find_by_id(user_id) 
     user.posts.destroy_all 
     redirect_to root_path 
    end 

在路線,

get 'delete_posts', to: 'controller_name#delete_posts' 

在上述路線中插入您的控制器名稱。

+0

相反的foreach,我們可以使用user.posts.destroy_all –

+0

@HieuPham:是的,改變了,謝謝。 –

0

聽起來像是你想在你的用戶,他們已經發布的問題之間的關聯dependent: :destroy選項。我假設它是這樣的:

class User 
    has_many :questions 

如果你看看various options for dependent on a has_many你可以將其設置爲:

has_many :questions, dependent: :destroy 

其中,從文檔:

控制會發生什麼當它們的主人被銷燬相關的對象:

:destroy導致所有相關的對象也可以銷燬

這意味着,當你的用戶實例被銷燬時,問題也將被破壞。

無論你真的想從已經取消了他們的帳戶或不刪除用戶所有的問題則另當別論。如果它們被使用,將它們移除將是一種恥辱,但這完全是一個完全不同的問題。

相關問題