You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

学习Rails时遇PATCH路由匹配错误,文章无法更新求助

Rails更新文章路由错误排查方案

嘿,我之前在Rails开发时也踩过路由的坑,来帮你解决这个更新文章失败的问题!

你遇到的核心问题是路由不匹配:终端和浏览器都提示No route matches [PATCH] "/article/viewing-article-2",说明你的PATCH请求路径和Rails定义的路由对不上,下面一步步排查:

1. 先确认路由配置是否正确

首先打开config/routes.rb,检查文章相关的路由:

  • 如果你用的是Rails默认的资源路由,应该是复数resources :articles,而不是单数的resource :article。默认资源路由会生成PATCH /articles/:id这条更新路由。
  • 如果你用了友好URL(比如用slug代替id),需要在路由里指定param:
resources :articles, param: :slug

这样生成的更新路由会是PATCH /articles/:slug,对应你的文章slugviewing-article-2

2. 验证已定义的路由

在终端运行命令:

rails routes

查找有没有类似这样的路由条目:

PATCH  /articles/:slug(.:format)  articles#update

如果找不到这条路由,说明你的路由配置有误;如果能找到,那问题出在表单提交的路径上。

3. 检查表单的提交路径

在你的文章编辑视图里,确保表单使用Rails的model辅助方法生成正确的action:

<%= form_with(model: @article) do |form| %>
  # 你的表单字段
<% end %>

Rails会根据@article的状态(已存在的记录)自动生成PATCH请求,并且指向正确的复数路径/articles/viewing-article-2

如果你是手动写的action属性,一定要注意是复数articles,比如:

<%= form_with(url: article_path(@article), method: :patch) do |form| %>

这里的article_path是路由辅助方法,如果你用了slug,它会自动生成/articles/viewing-article-2而不是单数的/article/...

4. 最后再测试一遍

修改完路由或表单后,重启服务器(rails s),然后重新尝试更新文章,应该就能解决这个路由不匹配的问题了!

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

火山引擎 最新活动