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
,NOTmethod::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服务器的输出,该输出显示了正在进行的请求。目前我没有看到明显的错误,我们需要知道当请求发出时发生了什么。除非你明白,否则我帮不了你。