Rails中使用FriendlyId实现根路径页面时如何调用命名路由?
正确实现方案
你只需要调整路由的别名配置,避免两组pages路由的命名冲突即可:
1. 修改路由配置(config/routes.rb)
将后台管理用的非show路由单独指定别名,避免占用page_*前缀的命名路由,再将前台show路由的别名设为page即可:
# 后台管理相关路由,生成的命名路由为 admin_pages_path、new_admin_page_path、edit_admin_page_path 等 resources :pages, except: [:show], as: :admin_pages # 前台页面展示路由,挂载到站点根路径,生成的命名路由为 page_path resources :pages, only: [:show], path: "/", as: :page
配置完成后,调用page_path(@page)会直接生成/about、/contact这类符合需求的路径,不会再携带/pages/前缀。
2. 可选:兼容旧路径避免404
如果担心用户或爬虫访问旧的/pages/xxx路径,可以新增301重定向规则,彻底解决重复内容问题:
# 放在上面两组路由的后面 get "/pages/:id", to: redirect("/%{id}", status: 301), constraints: { id: /[a-zA-Z0-9_-]+/ }
3. 验证配置
执行rails routes命令查看路由表,确认page路由的输出类似下方即可:
Prefix Verb URI Pattern Controller#Action page GET /:id(.:format) pages#show
内容的提问来源于stack exchange,提问作者Lee McAlilly
相关产品推荐
相关产品推荐

