2014-07-07 45 views
0

我最近觀看了railscast插曲#250 Authentication from Scratch (revised),我註冊/登錄/註銷操作正常。不過,我正在創建一個操作來從數據庫中刪除用戶,但是當我嘗試刪除用戶時,我目前遇到了一些錯誤。如何從數據庫中刪除/銷燬rails應用程序中的用戶?

users_controller.rb刪除/銷燬行動如下所示,

def delete 
    # the below line calls the destroy method/action 
    self.destroy 
    end 

    def destroy 
    session[:user_id] = nil 
    # @user = User.find(params[:id]) 
    @user.destroy 
    # User.find(parmas[:id]).destroy 
    # the below line didn't delete the current user :(
    # @user = User.destroy 
    redirect_to :controller=>'users', :action => 'new' 
    end 

我得到在瀏覽器中,當我試圖刪除用戶看起來像下面的錯誤消息。

enter image description here

包含刪除鏈接如下所示的頁面,index.html.erb

<h1>Welcome 
    <% if current_user %> 
     <%= current_user.email %> 
    <% end %> 
</h1> 

<p>You have <%= current_user.credit %> credits.</p> 

<!-- http://stackoverflow.com/questions/5607155/ --> 
<%= link_to('Delete your account', :controller => 'users', :action => 'destroy') %> 

的routes.rb

Rails.application.routes.draw do 

    # the below generated route is not necessary 
    # get 'sessions/new' 

    # delete user route 
    #get 'delete' => 'users#delete' 

    # shortened routes, per railscast comment 
    get 'signup' => 'users#new' 
    get 'login' => 'sessions#new' 
    get 'logout' => 'sessions#destroy' 

    # get 'signup', to: 'users#new', :as 'signup' 
    # get 'login', to: 'sessions#new', :as 'login' 
    # get 'logout', to: 'sessions#destroy', :as 'logout' 

    resources :users 
    resources :sessions 

    root to: 'users#new' 

    # get 'users/new' 

    # the below line specifies JSON as the default API format 
    namespace :api, defaults: {format: 'json'} do 
    namespace :v1 do 
     resources :users 
    end 
    end 

回答

2

按理說你得到一個NoMethodError,因爲你從來沒有設置@user變量,該行被註釋掉:

def destroy 
    session[:user_id] = nil 
    # @user = User.find(params[:id]) <-- Commenting out this line was your problem 
    @user.destroy 

更改爲

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

你應該很好去。

編輯:你可能想要做的一件事是改變使用link_to的舊風格,指定控制器和動作,並更改爲新的風格,使用route helpers。在這種情況下,我會使用link_to 'Delete your account', current_user, :method => :delete,但您可以運行rake routes進行檢查,它將根據您的routes.rb文件列出可用的幫助程序。

+0

將上述行更改爲'index .html.erb'到以下內容,'<%= link_to'刪除您的帳戶',users_path,:method =>:delete%>'但現在我收到以下錯誤,'沒有路由匹配[DELETE]「/用戶'' – Chris

+0

'rake routes'的輸出是什麼,特別是與用戶有關的部分? – ABMagil

+0

https://ghostbin.com/paste/zqvv8 – Chris

1

嗯,我認爲你應該讓事情變得簡單一點,從最愚蠢的事情開始,那就是事情KS。首先,如果您使用控制器作爲資源,那麼在那裏不會有刪除操作,只會銷燬。

def destroy 
    User.find(params[:id]).destroy 
    session[:user_id] = nil 
    redirect_to new_user_path 
end 

P.S.我再次假設你已經在你的routes.rb中設置了resources :users
如果您有一堆get|post|put|delete路由,請確保您正確指向重定向。

+0

爲了清楚起見,我修改了我的問題。我也重寫了我描述的摧毀行動,但我仍然遇到錯誤。 沒有路由匹配{:action =>「destroy」,:controller =>「users」} – Chris

+0

請張貼您的'routes.rb'文件 – ABMagil

+0

張貼'routes.rb'文件 – Chris

相關問題