Rails路由使用

1. 基本路由

get '/patients/:id', to: 'patient#show'

将这个请求交给patient控制器的show方法
其中:id会被转成一个参数 params[:id]传入Controller

2. 资源路由

resources :photos
会创建七个不同的路由,全部映射到 Photos
控制器上:

Rails路由使用_第1张图片
资源路由

3. 控制器命名空间和路由

3.1 如果你需要把控制器存在 app/controllers/admin 文件夹中,你学要路由中做如下声明:
namespace :admin do
    resources :posts, :comments
end

上述代码会为 posts
和 comments
控制器生成很多路由。对 Admin::PostsController
来说,Rails 会生成:

Rails路由使用_第2张图片
namespace

3.2 如果想把 /posts(前面没有 /admin)映射到 Admin::PostsController 控制器上,可以这么声明:
scope module: 'admin' do
  resources :posts, :comments
end

如果是单个,需如下声明:
resources :photos, module: 'admin'

3.3 如果想把 /admin/posts 映射到 PostsController 控制器(不在 Admin:: 命名空间内),可以这么声明:
scope '/admin' do
    resources :posts, :comments
end

如果只有一个资源,还可以这么声明:
resources :posts, path'/admin/posts'

4. 嵌套资源

当存在一对多关系时,可做如下声明:

resources :magazines do
  resources :ads
end
Rails路由使用_第3张图片
嵌套路由

5. 添加更多的 REST 架构动作

可用的路由并不局限于 REST 路由默认创建的那七个,还可以添加额外的集合路由或成员路由。

5.1 添加成员路由
resources :photos do
  member do
    get 'preview'
  end
end

该路由可识别/photos/1/preview 是个 GET 请求,映射到 PhotosControllerpreview 动作上,资源的 ID 传入 params[:id]。同时还生成了 preview_photo_urlpreview_photo_path 两个帮助方法。

如果资源不多,可使用:

resources :photos do
  get 'preview', on: :member
end
5.2 添加集合路由
resources :photos do
  collection do
    get 'search'
  end
end

这段路由能识别 /photos/search 是个 GET 请求,映射到 PhotosControllersearch 动作上。同时还会生成 search_photos_urlsearch_photos_path两个帮助方法。

和成员路由一样,也可使用 :on 选项:

resources :photos do
  get 'search', on: :collection
end
5.3 添加额外新建动作的路由
resources :comments do
  get 'preview', on: :new
end

这段代码能识别 /comments/new/preview 是个 GET 请求,映射到 CommentsControllerpreview 动作上。同时还会生成 preview_new_comment_urlpreview_new_comment_path 两个路由帮助方法。

你可能感兴趣的:(Rails路由使用)