2015-09-12 79 views
1

我想從我的rails應用程序中取消用戶。但是,目前這不起作用。無法刪除用戶從欄杆

我的路線文件 -

# Root is the unauthenticated path 
root 'sessions#unauth' 

# Sessions URL 
get 'sessions/unauth', to: 'sessions#unauth', as: :login 
post 'sessions/login', as: :signin 
delete 'sessions/logout', as: :logout 

# Resourceful routes for articles 
resources :articles 
get '/interests', to: 'articles#my_interests', as: 'interests' 
get '/destroy', to: 'users#destroy', as: 'destroy_user' 
resources :users, only: [:create,:new,:update,:destroy,:edit] 

然後,我有佈局文件夾裏面的html文件。

<li><%= link_to "De-activate User", destroy_user_path(current_user)%></li> 

用戶將點擊取消激活的用戶按鈕,我期待採取措施進入我的用戶控制器。以下是我的UsersController.rb。

class UsersController < ApplicationController 
    before_action :set_user, only: [:show, :edit, :update, :destroy] 
    before_action :authenticate_user, only: [:edit, :destroy, :update] 
    before_action :check_valid, only: [:edit, :destroy, :update] 
    # DELETE /users/1 
    # DELETE /users/1.json 
    def destroy 
    log_out @user 
    @user.destroy 
    respond_to do |format| 
     format.html { redirect_to login_path, notice: 'user was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
     @user = User.find(params[:id]) 
    end 

    def check_valid 
     unless @user==current_user 
     redirect_to articles_path 
     end 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def user_params 
     params.require(:user).permit(:first_name, :last_name, :email, :bio, :username, :password, :interest_list, :password_confirmation) 
    end 
end 

Rails給我錯誤的set_user方法。 錯誤 - 在@user = User.find(params [:id])找不到'user'的用戶

我無法理解這裏的問題是什麼?

我log_out方法 -

def log_out 
    session[:user_id] = nil 
end 
+0

請張貼'log_out'方法 –

+0

粘貼你的日誌 –

+0

Rajarshi達斯 - 請立即檢查。 – coder05

回答

1

試試這個

<li><%= link_to "De-activate User", destroy_user_path(current_user), method: :delete%></li> 

感謝

+0

我沒有得到這個。我有一個叫做destroy的方法,我通過在路由文件中設置銷燬路徑來呼叫。下面會做什麼?我沒有任何稱爲刪除的方法,也沒有定義路由。 – coder05

+0

這裏':delete'就是'get,put,post等'的請求方法類型。在將這個添加到link_to後,它將調用您的控制器的銷燬方法,因爲它用於標識刪除請求。您無需爲此定義方法刪除或添加路由。 –

+0

獲取此錯誤:沒有路由匹配[DELETE]「/destroy.1」 – coder05

0

你必須重寫,通過resources :users與生成默認的路徑:

get '/destroy', to: 'users#destroy', as: 'destroy_user' 

如果您正確地看到您的內置路線,則無法找到params[:id]。有了這條路線,你可以去行動,但在那裏找不到params[:id]

你可以改變你的路線是這樣的:

get '/destroy/:id', to: 'users#destroy', as: 'destroy_user' 

所以你cuurent代碼將正常工作。

+0

謝謝迪帕克。我在log_out方法中遇到錯誤的參數錯誤數目。它在我的原始文章中。你能檢查一下,那邊有什麼問題嗎? – coder05

+0

你有沒有改變。它應該正常工作 –

+0

id問題雖然排序。 – coder05

0

請試試這個:

<%= link_to "De-activate User", current_user, method: :delete %> 

OR

<%= link_to "De-activate User", user_path(current_user), method: :delete %>