接着之前的坑,咱们这次来看下这个类似于PHP的laravel的路由是怎么来使用的。
首先是最简单的,格式如下:
#传参,将这个请求交给patient控制器的show方法
#其中:id会被转成一个参数 params[:id]传入Controller
get '/patients/:id', to: 'patient#show'
#不传参
get '/patients', to: 'patient#show'
之后就是资源方面的路由了,会上传文件等一系列路由,格式如下:
resources :photos
上述代码可以创建七个不同的路由,全部映射到 Photos其中控制器上的方法如下:
还有涉及到命名空间的路由,你像我们需要把控制器存在 app/controllers/admin 文件夹中,就要路由中做如下声明:
namespace :admin do
resources :posts, :comments
end
上述代码会为 posts 和 comments 控制器生成很多路由。对 Admin::PostsController 来说,Rails 会生成:
还有就是,如果我们想把 /posts(前面没有 /admin)映射到 Admin::PostsController 控制器上,可以这么声明:
scope module: 'admin' do
resources :posts, :comments
end
如果是单个,需如下声明:
resources :photos, module: 'admin'
如果想把 /admin/posts 映射到 PostsController 控制器(不在 Admin:: 命名空间内),可以这么声明:
scope '/admin' do
resources :posts, :comments
end
如果只有一个资源,还可以这么声明:
resources :posts, path'/admin/posts'
当存在一对多关系时,可做如下声明:
resources :magazines do
resources :ads
end
可用的路由并不局限于 REST 路由默认创建的那七个,还可以添加额外的集合路由或成员路由。
1、添加成员路由
resources :photos do
member do
get 'preview'
end
end
该路由可识别/photos/1/preview
是个 GET
请求,映射到 PhotosController
的 preview
动作上,资源的 ID 传入 params[:id]
。同时还生成了 preview_photo_url
和 preview_photo_path
两个帮助方法。
如果资源不多,可使用:
resources :photos do
get 'preview', on: :member
end
2、添加集合路由
resources :photos do
collection do
get 'search'
end
end
这段路由能识别 /photos/search
是个 GET
请求,映射到 PhotosController
的 search
动作上。同时还会生成 search_photos_url
和 search_photos_path
两个帮助方法。
和成员路由一样,也可使用 :on
选项:
resources :photos do
get 'search', on: :collection
end
3、添加额外新建动作的路由
resources :comments do
get 'preview', on: :new
end
这段代码能识别 /comments/new/preview
是个 GET
请求,映射到 CommentsController
的 preview
动作上。同时还会生成 preview_new_comment_url
和 preview_new_comment_path
两个路由帮助方法。
好啦,可能还不完全,暂时在网上找的差不多也就这么些了,之后有机会在一起分享吧。
好啦,本次记录就到这里了。
如果感觉不错的话,请多多点赞支持哦。。。