Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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 无法删除Rails中的记录_Ruby On Rails - Fatal编程技术网

Ruby on rails 无法删除Rails中的记录

Ruby on rails 无法删除Rails中的记录,ruby-on-rails,Ruby On Rails,我有三个模型:项目、团队和用户 团队有许多相关的项目 在“我的项目定义”中,我想删除与项目关联的团队,但单击“删除”时不会发生任何事情 我的发言如下: def destroy @project = Project.find(params[:id]) @team = project.team @project.destroy # edit #1 shown below: respond_to do |format| format.html { redirect_to @

我有三个模型:项目、团队和用户

团队有许多相关的项目

在“我的项目定义”中,我想删除与项目关联的团队,但单击“删除”时不会发生任何事情

我的发言如下:

def destroy
  @project = Project.find(params[:id])
  @team = project.team
  @project.destroy
  # edit #1 shown below:
  respond_to do |format|
    format.html { redirect_to @team, notice: 'Project was successfully destroyed.' }
  end
end
class ProjectsController < ApplicationController
  before_action :set_project, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, only: [:edit, :update, :destroy]

  # GET /projects
  # GET /projects.json
  def index
    @projects = Project.all.order('created_at DESC')
  end

  # GET /projects/1
  # GET /projects/1.json
  def show
  end

  # GET /projects/new
  def new
    @project = current_user.projects.build
    @teams = Team.where('id = ?', current_user.team_id)
  end

  # GET /projects/1/edit
  def edit
    @teams = current_user.teams
  end

  # POST /projects
  # POST /projects.json
  def create
    @project = current_user.projects.build(project_params)

    respond_to do |format|
      if @project.save
        format.html { redirect_to @project, notice: 'Project was successfully created.' }
        format.json { render :show, status: :created, location: @project }
      else
        format.html { render :new }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /projects/1
  # PATCH/PUT /projects/1.json
  def update
    respond_to do |format|
      if @project.update(project_params)
        format.html { redirect_to @project, notice: 'Project was successfully updated.' }
        format.json { render :show, status: :ok, location: @project }
      else
        format.html { render :edit }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /projects/1
  # DELETE /projects/1.json
  def destroy
    @project = Project.find(params[:id])
    @team = project.team
    @project.destroy
    # edit #1 shown below:
    respond_to do |format|
      format.html { redirect_to @team, notice: 'Project was successfully destroyed.' }
    end
  end

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

    # Never trust parameters from the scary internet, only allow the white list through.
    def project_params
      params.require(:project).permit(:name, :description, :team_id)
    end
end

并使show.erb.html内的按钮删除项目并链接回项目路径

<%= link_to 'Delete Project', project_path(@project), data: { confirm: 'Are you sure'}, method: :destroy, class:'button is-danger is-outlined' %>
                        </div>
我对rails还很陌生,无法找到发生这种情况的原因

编辑2-更多详细信息 项目控制员如下:

def destroy
  @project = Project.find(params[:id])
  @team = project.team
  @project.destroy
  # edit #1 shown below:
  respond_to do |format|
    format.html { redirect_to @team, notice: 'Project was successfully destroyed.' }
  end
end
class ProjectsController < ApplicationController
  before_action :set_project, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, only: [:edit, :update, :destroy]

  # GET /projects
  # GET /projects.json
  def index
    @projects = Project.all.order('created_at DESC')
  end

  # GET /projects/1
  # GET /projects/1.json
  def show
  end

  # GET /projects/new
  def new
    @project = current_user.projects.build
    @teams = Team.where('id = ?', current_user.team_id)
  end

  # GET /projects/1/edit
  def edit
    @teams = current_user.teams
  end

  # POST /projects
  # POST /projects.json
  def create
    @project = current_user.projects.build(project_params)

    respond_to do |format|
      if @project.save
        format.html { redirect_to @project, notice: 'Project was successfully created.' }
        format.json { render :show, status: :created, location: @project }
      else
        format.html { render :new }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /projects/1
  # PATCH/PUT /projects/1.json
  def update
    respond_to do |format|
      if @project.update(project_params)
        format.html { redirect_to @project, notice: 'Project was successfully updated.' }
        format.json { render :show, status: :ok, location: @project }
      else
        format.html { render :edit }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /projects/1
  # DELETE /projects/1.json
  def destroy
    @project = Project.find(params[:id])
    @team = project.team
    @project.destroy
    # edit #1 shown below:
    respond_to do |format|
      format.html { redirect_to @team, notice: 'Project was successfully destroyed.' }
    end
  end

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

    # Never trust parameters from the scary internet, only allow the white list through.
    def project_params
      params.require(:project).permit(:name, :description, :team_id)
    end
end

class ProjectsController
删除资源后重定向到该资源无效,因为该资源已不存在。因此,控制器操作可能会重定向到已删除的项目团队:

def destroy
  @project = Project.find(params[:id])
  @team = project.team
  @project.destroy
  # edit #1 shown below:
  respond_to do |format|
    format.html { redirect_to @team, notice: 'Project was successfully destroyed.' }
  end
end
那么你的
链接应该使用
method::delete
NOT
method::destroy

<%= link_to 'Delete Project', project_path(@project), data: { confirm: 'Are you sure'}, method: :delete, class:'button is-danger is-outlined' %>

参考:

看看这是否能让你继续,如果不能,请分享一些调试信息

编辑#1:
在您的操作中,您需要做更多的工作来处理rails如何响应请求。我以前没有注意到它丢失了,但是该操作应该有一个
respond\u to
块,您可以选择基本上不同的响应方式。我修改了上面的控制器操作代码,为您提供了一个示例。

您是否收到任何类型的错误?您正在尝试删除该项目,而不是与之关联的团队,并且您还试图重定向到刚刚销毁的项目。尝试在rails association文档上查找
dependent::destroy
。尝试一下,如果失败将引发异常。感谢您的回复Ben,我已经更改了这两点,不幸的是,我没有收到错误(我尝试了@project.destroy!正如其他人建议的,但没有错误),当我单击delete按钮时,我收到了一个get请求,所以我想知道这是否和我的路线有关?我已经在上面列出了我的路线2019-12-08 11:09:26+1300````@basic开始为::1获取“/projects/1”您确定您的终端/bash没有显示任何错误吗?puma服务器应该在那里输出关于任何数据库查询的反馈,以及每次请求时出现的错误。此外,能否添加整个项目控制器代码(仅添加项目控制器,而不是项目中的所有控制器)?顺便说一句,我注意到你还需要做些改变。查看我的答案编辑。绝对不会出现错误。当我点击删除按钮时,似乎正在重新加载。我刚刚在我原来的帖子中添加了项目控制器,并对你在帖子中所说的进行了更改。听起来好像出于某种原因,它没有选择链接的方法,因此它可能只是呈现了表演动作。
rails-routes
命令的输出是什么?此外,您还需要弄清楚如何共享rails服务器的输出,该输出显示了正在进行的请求。目前我没有看到明显的错误,我们需要知道当请求发出时发生了什么。除非你明白,否则我帮不了你。