2016-01-08 16 views
0

每當我嘗試刪除用戶時,都會收到錯誤:Couldn't find User with 'id'=8。錯誤指向「current_user」方法中的application_controller.rb一行:ActiveRecord::RecordNotFound at /users。 「/用戶」是我試圖重定向到的地方。Ruby on Rails 4:刪除用戶觸發器錯誤

我不知道我要去哪裏錯。我不知道這是application.html.erb file中我錯過的<%= javascript_include_tag ... %>

application_controller.rb

def current_user 
@current_user ||= User.find(session[:user_id]) if session[:user_id] 
end 

users_controller.rb

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

def destroy 
@user = User.find(params[:id]).destroy 
flash[:warning] = '#{@user.name} has been deleted.' 
redirect_to users_path 
end 

sessions_controller.rb

class SessionsController < ApplicationController 

def create 
    user = User.find_by(email: params[:email]) 
    if user && user.authenticate(params[:password]) 
     session[:user_id] = user.id 

      if request.referrer == login_url 
       redirect_to root_path 
      else 
       redirect_to :back 
      end    

    else 
     flash.now[:danger] = "Email and password did not match. Please try again." 
     render :new 
    end 
end 

def destroy 
    session[:user_id] = nil 
    flash[:success] = "Logged out." 
    redirect_to :back 
end 

end 

的意見/用戶/ show.html.erb

<p id="notice"><%= notice %></p> 
<h2 id="page-title"><%= @user.name %> <small>@<%= @user.username %></small> 
    <div class="small pull-right"></div> 
</h2> 

<hr/> 

<% @user.types.each do |type| %> 
    <h4><small><%= type.name %></small></h4> 
<% end %> 

    <% if current_user == @user %> # visible to current_user 
     <div class="float-right"> 

      <%= link_to 'Edit', edit_user_path(@user), class: 'btn btn-default' %> 
      <%= link_to 'Delete Account', user_path, 
        data: { confirm: 'Are you sure you want to delete your account forever?' }, 
        method: :delete, class: 'btn btn-danger' %> 
     </div> 
    <% end %> 

如果你需要的文件了,讓我知道。

我覺得這是一個簡單的修復。請幫忙。並提前謝謝你!

回答

0

當您使用find與一個不存在的記錄ID,ActiveRecord拋出ActiveRecord::RecordNotFound異常。您可以使用find_by解決此問題,該解決方案將返回nil。所以試試這個在您的application_controller.rb

def current_user 
@current_user ||= User.find_by(id: session[:user_id]) 
end 

或者,你可以用你的支票更正確地做這個

def current_user 
@current_user ||= (session[:user_id].present? && User.find(session[:user_id])) 
end 

第二仍會引發異常,如果在會話中的user_id是不是無效用戶。

希望有幫助

+0

第一個作品!謝謝@RajeshSharm! – BB123

0

我想如果錯誤是在應用控制器中添加以下代碼在用戶控制器的破壞方法:

session[:user_id] = nil if current_user == @user

,如果你刪除當前連接的用戶通過這種方式,它會被註銷。

+0

這給了我同樣的錯誤。 – BB123

+0

您能否請求包含錯誤的堆棧跟蹤? –

+0

對不起,我不完全確定「堆棧跟蹤」是什麼意思......對RoR和一般編程來說仍然很新穎。 – BB123