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

Rails应用Bootstrap模态框更新路由异常:/event.3而非/events/3

问题排查与解决方案

看起来你的问题出在路由配置错误以及Rails的form_for无法正确识别更新路径导致的,咱们一步步来理清楚:

核心问题分析

  • 路由命名错误:你在配置new动作的路由时,as: '/event'这个写法是错误的。as参数应该是一个符号(比如:new_event或者:event),而不是带斜杠的字符串,这会导致Rails生成的路由助手混乱,当form_for尝试生成更新路径时,错误地把id当成格式后缀,生成了/event.3这种路径。
  • 手动路由与resources冲突:你混合使用了resources :events和手动添加的路由,而且resources只包含了:create, :index,没有包含:edit, :update,导致Rails无法自动生成正确的更新路由助手,form_for找不到正确的PATCH路径,只能 fallback 到错误的路径。

解决方案

第一步:修正路由配置

优先用Rails的RESTful资源路由来管理,避免手动添加零散路由,把你的路由文件改成下面这样:

# config/routes.rb
resources :events, only: [:new, :create, :index, :edit, :update]

这样Rails会自动生成所有你需要的路由,包括:

  • GET /events/new → events#new
  • GET /events/:id/edit → events#edit
  • PATCH /events/:id → events#update
    同时会自动生成正确的路由助手,比如event_path(@event)会指向/events/:id,这正是你需要的更新路径。

如果你一定要保留手动的/event路径指向new动作(不推荐,不符合RESTful规范),可以改成:

resources :events, only: [:create, :index, :edit, :update]
get '/event', to: 'events#new', as: :new_event # 这里as用正确的符号命名

第二步:确认form_for的行为

你的form_for @event, :remote => true代码本身是没问题的,只要@event是已经存在的记录(你在edit动作里已经通过current_user.events.find(params[:id])加载了正确的记录),Rails会自动识别这是一个更新操作,生成指向PATCH /events/:id的表单,而不是错误的/event.3。

第三步:验证路由

修改完路由后,运行rake routes,你应该能看到类似这样的输出:

Prefix Verb   URI Pattern               Controller#Action
    events GET    /events(.:format)         events#index
           POST   /events(.:format)         events#create
 new_event GET    /events/new(.:format)     events#new
edit_event GET    /events/:id/edit(.:format) events#edit
     event PATCH  /events/:id(.:format)     events#update
           PUT    /events/:id(.:format)     events#update

这里的event PATCH /events/:id(.:format)就是正确的更新路由,form_for会自动使用这个路径。

额外检查

你的FullCalendar的eventClick代码里的url是'events/' + event.id + '/edit',这个是正确的,和修正后的路由匹配,不需要修改。

这样修改后,点击更新按钮时,表单就会发送PATCH请求到/events/3而不是/event.3了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:06:34