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
相关产品推荐
相关产品推荐

