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

Rails 5如何配置路由使指定URL触发volunteer_events控制器的add_shift方法

问题原因

Rails路由按照从上到下的优先级匹配,你的路由配置里肯定预先声明了resources :volunteer_events,该规则会自动生成GET /volunteer_events/:id格式的show路由,匹配优先级高于你手写的add_shift路由。当你访问/volunteer_events/add_shift时,Rails会把add_shift识别为id参数,匹配到show动作执行,因此会抛出查找id为add_shift的VolunteerEvent失败的报错。

解决方案

你可以选择以下任意一种方式修复:

  • 方案1:调整路由声明顺序,把自定义的add_shift路由放到resources :volunteer_events前面,保证优先匹配
    get '/volunteer_events/add_shift', to: 'volunteer_events#add_shift'
    resources :volunteer_events
    
  • 方案2(更符合Rails开发惯例):使用resources的collection块声明自定义集合路由,不需要手动调整顺序,Rails会自动把自定义路由优先级放到默认路由之前
    resources :volunteer_events do
      collection do
        get 'add_shift'
      end
    end
    

两种方案都可以实现访问/volunteer_events/add_shift时触发volunteer_events控制器的add_shift方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:09:03