Ruby on Rails文章删除功能失效,请求排查修复
Rails 文章删除功能失效的排查与修复
问题根源分析
从提供的代码来看,删除功能失效主要由以下几个问题导致:
- 路由配置存在无效条目,干扰正常路由匹配
- 控制器中缺少关键的前置方法实现,权限验证与资源查询逻辑缺失
- 销毁方法存在重复查询代码,可能引发逻辑冲突
修复步骤
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
相关产品推荐
相关产品推荐

