多迈知识库
第二套高阶模板 · 更大气的阅读体验

Ruby on Rails路由配置详解

发布时间:2025-12-11 17:11:09 阅读:319 次

理解Rails中的routes.rb文件

Ruby on Rails的路由系统是整个应用请求分发的核心。所有进入应用的HTTP请求,首先都会经过config/routes.rb这个文件。它就像一个交通指挥员,告诉Rails某个URL应该由哪个控制器的哪个动作来处理。

比如你在浏览器里输入/articles/5,Rails会根据路由规则决定是调用ArticlesControllershow方法,并把id: 5传进去。

基本路由写法

最常见的写法是使用资源化路由(resourceful routing)。只需一行代码就能生成一组标准的RESTful路径:

resources :articles

这一行会自动生成以下路由:

  • GET /articles → index
  • GET /articles/new → new
  • POST /articles → create
  • GET /articles/:id → show
  • GET /articles/:id/edit → edit
  • PATCH /articles/:id → update
  • DELETE /articles/:id → destroy

限制资源路由的动作

并不是每个模型都需要全部七个动作。比如用户头像上传功能可能只需要newcreate,这时可以用:only:except来精简:

resources :avatars, only: [:new, :create]

或者排除某些动作:

resources :logs, except: [:destroy]

添加自定义动作

有时候标准动作不够用。比如想给文章添加“点赞”功能,可以这样加成员路由:

resources :articles do
  member do
    post 'like'
  end
end

这样就生成了POST /articles/1/like这样的路径,对应ArticlesController#like方法。

如果是作用在整个资源集合上的操作,比如批量发布,可以用collection

resources :articles do
  collection do
    get 'drafts'
    post 'publish_all'
  end
end

访问/articles/drafts就会调用ArticlesController#drafts

设置根路径

新项目通常要设置首页。比如让访问根目录时显示文章列表:

root 'articles#index'

这样访问/就等同于访问/articles

命名路由与路径辅助方法

Rails会自动为路由生成路径辅助方法。比如resources :comments后,就可以在视图中使用new_comment_pathcomment_path(@comment)

你也可以自定义名称:

get 'about', to: 'pages#about', as: 'about_us'

这样就能用about_us_path来生成/about的路径。

约束条件的应用

有时需要对参数格式做限制。比如确保文章ID只能是数字:

resources :articles, constraints: { id: /\d+/ }

或者针对子域名做路由区分:

constraints subdomain: 'admin' do
  resources :users
end

这样只有admin.example.com下的请求才会匹配到用户管理路由。

挂载引擎

在大型项目中,常会把某些功能拆成独立的Rails引擎。比如后台管理系统可以做成一个引擎,然后在主应用中挂载:

mount Admin::Engine, at: '/admin'

所有以/admin开头的请求都会交给Admin引擎处理,保持主路由清晰简洁。