2015-09-12 45 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 %>