在开发一个基于 ref="/tag/2028/" style="color:#B2A89E;font-weight:bold;">Ruby on Rails 的网站时,路由就像是城市的交通指挥系统。它决定了用户访问某个URL时,应该由哪个控制器和动作来处理。合理的路由配置不仅能提升开发效率,还能优化系统的可维护性和性能。
基础路由写法
Rails 的路由定义在 config/routes.rb 文件中。最简单的路由是将一个 URL 路径映射到指定的控制器动作。
get '/articles', to: 'articles#index'
post '/articles', to: 'articles#create'
上面的例子表示:当用户用 GET 方法访问 /articles 时,Rails 会调用 ArticlesController 中的 index 方法;如果是 POST 请求,则执行 create 方法。
资源化路由:一键生成CRUD路径
大多数时候,我们操作的是“资源”,比如文章、用户、订单。Rails 提供了 resources 方法,能自动为资源生成标准的 RESTful 路由。
resources :articles
这一行代码会自动生成 7 条常用路由:索引页、详情页、新建、创建、编辑、更新、删除。省去了手动一条条写的麻烦,也保证了接口风格统一。
嵌套路由处理关联数据
比如每篇文章有多条评论,查看某条评论时,URL 通常写作 /articles/1/comments/2。这时可以用嵌套路由:
resources :articles do
resources :comments
end
这样就能生成带层级关系的路径。在控制器中可以通过 params[:article_id] 轻松获取父级 ID,避免重复查询。
命名空间与模块化管理
随着项目变大,后台管理功能往往需要独立出来。使用 namespace 可以自动组织控制器路径和路由前缀。
namespace :admin do
resources :users
resources :articles
end
这会把请求指向 Admin::UsersController 和 Admin::ArticlesController,对应的访问路径是 /admin/users 和 /admin/articles,结构清晰,权限隔离方便。
自定义路径与别名
有时候默认的 URL 不够友好。比如希望用 /login 代替 /sessions/new,可以用 as 和 path 修改:
get '/login', to: 'sessions#new', as: 'login'
post '/login', to: 'sessions#create'
这样不仅路径简洁,还生成了名为 login_path 的辅助方法,在视图里可以直接使用。
限制路由动词与格式
有些接口只接受特定格式,比如 JSON。可以在路由中加上约束:
resources :articles, defaults: { format: 'json' }
或者限定只响应某些 HTTP 方法:
resources :articles, only: [:index, :show]
减少不必要的路由暴露,也能提升安全性。
查看当前所有路由
在终端运行 rails routes 或 rake routes,可以列出项目中所有的路由规则。加 -g 参数还能按关键字过滤,比如 rails routes -g article,快速定位相关路径。
良好的路由设计就像给网站画了一张清晰的地图,让用户和开发者都能快速找到目标。花点时间理顺 routes.rb,后续的开发和优化都会轻松不少。