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

Ruby on Rails中使用resources定义路由时如何移除new动作的/new后缀

Ruby on Rails 路由配置解决方案

你想要保留resources写法的话有可行方案,不需要强制改用单独get路由,具体实现如下:

方案1:使用resources + path_names参数实现

直接修改路由配置为:

namespace :popular, path: 'p' do
  resources :contacts, only: [:new], path: 'e/:article_id', path_names: { new: '' }
end

配置生效后生成的路由完全符合你的预期:

new_popular_contact GET   /p/e/:article_id(.:format)    popular/contacts#new

原理解释

Rails的resources方法默认会为new动作自动追加/new路径后缀,path_names参数专门用于自定义资源各动作对应的路径片段,将new对应的路径值设为空字符串即可去掉默认的/new后缀。

方案2:单独get路由写法(你提供的方案)

namespace :popular, path: 'p' do
  get '/e/:article_id' => 'contacts#new', as: :new_popular_contact
end

注意:如果需要保持和resources写法一致的路由命名助手,需要额外添加as: :new_popular_contact参数,否则默认生成的路由命名会是popular_e_article_id。

两种方案选择建议

  • 若该路由确实属于contacts资源的new动作,后续可能扩展create、edit等其他资源相关动作,优先选择resources方案,和Rails资源路由规范保持一致,维护成本更低。
  • 若该路由是孤立的单一路由,后续不会关联contacts资源的其他动作,单独get写法更简洁,也可以直接使用。

内容的提问来源于stack exchange,提问作者TAMA.O

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:57:02