2013-04-29 11 views
11

Per la mia applicazione, ho account utente che le persone possono iscriversi. Io uso la gemma devise per l'installazione.Rails - Come distruggere gli utenti creati sotto Devise?

Ho anche una pagina utenti che elenca tutti gli utenti registrati al sito insieme a un collegamento destroy. Desidero che il mio amministratore sia in grado di eliminare utenti e di reindirli a questa pagina di elenco degli utenti. Ma quando clicco sul link per distruggere un utente specifico, si limita a reindirizzare alla pagina del profilo utente e non cancella l'utente dal database.

Qualcuno sa perché?

** AGGIORNAMENTO: aggiornato il codice di seguito come consigliato e funziona ora.

users_controller.rb

def destroy 
    @user = User.find(params[:id]) 
    @user.destroy 

    if @user.destroy 
     redirect_to root_url, notice: "User deleted." 
    end 
    end 

utenti/index.html.erb

<div class = "container"> 
    <div id="usersview"> 
    <b>USERS DIRECTORY</b> 
    <%= render @users %> 
</div> 

<center> 
    <%= will_paginate @users %> 
</center> 
</div> 

utenti/_user.html.erb

<div class="comments"> 
    <%= link_to user.name, user %> 
    <% if current_user.try(:admin?) && !current_user?(user) %> 
     <%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %> 
    <% end %> 
</div> 

routes.rb

devise_for :users  
match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user 
match 'users/:id' => 'users#show', as: :user 
resources :users 

risposta

10

Devise non fornisce questa funzionalità immediatamente. Hai creato la tua azione di distruzione, ma devi anche creare un percorso personalizzato per quell'azione.

Nei tuoi percorsi:

match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user 

E poi durante la creazione del link:

<%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %> 
+0

Ho aggiornato (vedere la domanda modificata) come hai notato ma gli stessi risultati.Non distruggere e percorsi per mostrare la pagina. È possibile che i miei percorsi non siano nel giusto ordine? – spl

+0

prova a posizionare il percorso personalizzato sopra la chiamata 'devise_for'. – AlexBrand

+0

Non penso che tu abbia bisogno delle 'risorse: utenti ' – AlexBrand

3

Penso che tu abbia nel tuo routes.rb: resources :users

Il problema è che si è non passare l'utente che si desidera eliminare quando si fa clic:

utenti/_user.html.erb

<%= link_to "Destroy", user, method: :delete, data: { confirm: "You sure?" } %> 

vedere che in secondo param ho aggiunto utente invece di user_url.

users_controller.rb

def destroy 
    @user = User.find(params[:id]) 

    if @user.destroy 
     redirect_to root_url, notice: "User deleted." 
    end 
    end 

Nel controllore ho rimosso un @ user.destroy. Lo stavi chiamando due volte.

Spero che aiuti!

0

Oppure dai binari c si può fare qualcosa del genere in cui "x" è id utente.

user = User.where(id: x) 
user.destroy(1) 
2

Secondo ideare 4.1 rake routes e punti di vista, utilizzando la seguente vi aiuterà a eliminare l'account, una volta loggato come utente.

<%= link_to "Cancel my account", registration_path(current_user), data: { confirm: "Are you sure?" }, method: :delete %> 
Problemi correlati