Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 RubyonRails 4:删除用户触发器错误_Ruby On Rails 4_Rails Activerecord_Crud - Fatal编程技术网

Ruby on rails 4 RubyonRails 4:删除用户触发器错误

Ruby on rails 4 RubyonRails 4:删除用户触发器错误,ruby-on-rails-4,rails-activerecord,crud,Ruby On Rails 4,Rails Activerecord,Crud,每当我试图删除一个用户时,就会出现错误:找不到id=8的用户。错误指向“当前用户”方法中的application\u controller.rb中的一行:ActiveRecord::RecordNotFound at/users。“/users”是我试图重定向到的位置 我不知道我错在哪里。我想知道在application.html.erb文件中是否缺少 应用程序\u控制器.rb def current_user @current_user ||= User.find(session[:user

每当我试图删除一个用户时,就会出现错误:
找不到id=8的用户。错误指向“当前用户”方法中的
application\u controller.rb
中的一行:
ActiveRecord::RecordNotFound at/users
。“/users”是我试图重定向到的位置

我不知道我错在哪里。我想知道在
application.html.erb文件中是否缺少

应用程序\u控制器.rb

def current_user
 @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
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
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
<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 %>
用户\u控制器.rb

def current_user
 @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
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
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
<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 %>
会话\u controller.rb

def current_user
 @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
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
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
<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 %>
class sessioncontroller
views/users/show.html.erb

def current_user
 @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
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
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
<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 %>

@
#对当前用户可见
如果你需要更多的文件,请告诉我


我觉得这是一个简单的解决办法。请帮忙。提前谢谢你

我猜如果应用程序控制器中存在bug,请在用户控制器的销毁方法中添加以下代码:

会话[:user\u id]=如果当前用户==@user,则为零


这样,如果您删除当前连接的用户,它将被注销。

当您对不存在的记录id使用
find
时,ActiveRecord抛出
ActiveRecord::RecordNotFound
异常。您可以通过使用
find_by
来解决这个问题,它将返回
nil
。因此,请在您的应用程序_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
如果会话中的用户id不是无效用户,则第二个仍将引发异常


希望这能有所帮助

对不起,我不太清楚“堆栈跟踪”到底是什么意思……对于RoR和编程来说,总体来说还是相当陌生的。