You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails文章删除功能失效,请求排查修复

Rails 文章删除功能失效的排查与修复

问题根源分析

从提供的代码来看,删除功能失效主要由以下几个问题导致:

  1. 路由配置存在无效条目,干扰正常路由匹配
  2. 控制器中缺少关键的前置方法实现,权限验证与资源查询逻辑缺失
  3. 销毁方法存在重复查询代码,可能引发逻辑冲突

修复步骤

1. 修正路由配置

打开config/routes.rb,删除多余的resources :destroy条目,修正后的路由如下:

Rails.application.routes.draw do
  devise_for :users
  resources :patients
  resources :posts
  root 'home#top'
  resources :tweets
  get "about" => "home#about"  
end

2. 补充控制器前置方法实现

在app/controllers/posts_controller.rb的末尾添加private方法块,实现set_post和authorize_user!:

private

# 查找指定投稿,不存在则跳转首页
def set_post
  @post = Post.find_by(id: params[:id])
  unless @post
    flash[:alert] = "指定された投稿は存在しません。"
    redirect_to root_path
  end
end

# 验证当前用户是否为投稿所有者
def authorize_user!
  unless @post.user == current_user
    flash[:alert] = "この操作を実行する権限がありません。"
    redirect_to posts_path
  end
end

3. 优化销毁方法代码

删除destroy方法中重复的@post = Post.find(params[:id]),利用前置方法已查询到的资源:

def destroy
  if @post.destroy
    redirect_to posts_path, notice: '投稿が削除されました'
  else
    redirect_to posts_path, alert: '投稿の削除に失敗しました'
  end
end

4. 确认模型关联(必要时补充)

确保app/models/post.rb中存在与用户的关联:

class Post < ApplicationRecord
  belongs_to :user
  # 其他模型代码...
end

同时app/models/user.rb中需对应:

class User < ApplicationRecord
  has_many :posts, dependent: :destroy
  # Devise相关代码...
end

5. 确认Turbo加载状态

确保app/views/layouts/application.html.erb的<head>中包含Turbo的加载标签:

<%= javascript_importmap_tags %>

内容的提问来源于stack exchange,提问作者hiroppy123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:32:33