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

