Rails出现No route matches [POST] "/events/new"错误如何解决?
问题修复方案
核心故障原因
你提交的POST请求地址与路由定义不匹配,同时存在冗余路由、代码变量错误等问题,按以下步骤逐一修复即可:
1. 修正表单提交路径
当前表单配置url: new_event_path, method: "post"错误:从路由输出可确认new_event_path仅支持GET请求,对应新建页面的访问路由,不接收POST提交。
修改app/views/events/forms/new/_form.html.haml的表单定义,直接用Rails RESTful约定写法(自动适配新建/编辑场景,自动匹配请求方法和提交地址):
= form_with model: @event do |f|
若要显式指定提交地址,也可替换为:
= form_with url: events_path, method: "post" do |f|
2. 清理冗余路由
你之前执行rails g controller Events new create edit update destroy index show时,Rails自动在routes.rb中生成了一堆单独的GET动作路由(就是路由输出顶部的events_new、events_create等路由),和resources :events生成的标准RESTful路由重复,容易引发匹配冲突。
打开config/routes.rb,删除所有resources :events之外的、和events动作相关的单独路由配置,仅保留resources :events即可。
3. 修复其他隐含错误
- 错误提示组件变量错误:
app/views/events/forms/parts/_errors.html.haml中的event.errors.each改为@event.errors.each,否则表单校验失败时会报变量未定义错误。 - 创建成功跳转地址错误:控制器create动作中的
redirect_to event改为redirect_to @event,否则事件保存成功后跳转时会报错。
验证
全部修改完成后重启Rails服务,重新提交表单即可正常触发create动作。
内容的提问来源于stack exchange,提问作者Patrick Vellia
相关产品推荐
相关产品推荐

