rails routes路由笔记

routes : 规定了特定格式的URL请求到后端controller的action的分发规则




Name routes
get 'users/:id', to: 'users#show', as: "user"


RESTful资源设计
get
post
put/patch
delete
定义每个请求的url请求方式,同样的url可以拥有不同的请求方式的
RESTful只是约束
让我们的代码设计更统一
让我们专注于产品实现,而不是代码设计本身


Resources routes 
resources :users
Prefix   	Verb      Url Pattern        Controller#Action
users   	get       /users             users#index
users   	post      /users             users#create
new_user   	get       /users/new         users#new
edit_user   	get       /users/:id/edit    users#edit
user       	get       /users/:id/show    users#show
user         	patch     /users/:id         users#update
user         	put       /users/:id         users#update
user         	delete    /users/:id         users#destroy
rails 已经帮我们生成了每个URL的输出路由方法,通过rake routes可以查看


Namespace routes
namespace :admin do
resources :users
end
Prefix             Verb        Url Pattern               Controller#Action
admin_users        get         /admin/users              admin/users#index
admin_users        post        /admin/users              admin/users#create
new_admin_user     get         /admin/users/new          admin/users#new
edit_admin_user    get         /admin/users/:id/edit     admin/users#edit
admin_user         get         /admin/users/:id/show     admin/users#show
admin_user         patch       /admin/users/:id          admin/users#update
admin_user         put         /admin/users/:id          admin/users#update
admin_user         delete      /admin/users/:id          admin/users#destroy




Scope routes
scope module: "admin" do
resources :users 
end
Prefix         Verb        Url Pattern         Controller#Action
users          get         /users              admin/users#index
users          post        /users              admin/users#create
new_user       get         /users/new          admin/users#new
edit_user      get         /users/:id/edit     admin/users#edit
user           get         /users/:id/show     admin/users#show
user           patch       /users/:id          admin/users#update
user           put         /users/:id          admin/users#update
user          delete       /users/:id          admin/users#destroy
我们如果不想在url中显示/admin前缀可以这么写
反之如果我们想在url中显示/admin但是不想把代码定义在域名空间下可以如下做法:
scope '/admin' do
resources :users
end
Prefix         Verb          Url Pattern            Controller#Action
users          get           admin/users             users#index
users          post          admin/users             users#create
new_user       get           admin/users/new         users#new
edit_user      get           admin/users/:id/edit    users#edit
user           get           admin/users/:id/show    users#show
user           patch         admin/users/:id         users#update
user           put           admin/users/:id         users#update
user           delete        admin/users/:id         users#destroy




Nested routes
resources :users do
resources :blogs
end
   Prefix       Verb      URI Pattern                              Controller#Action
    user_blogs  GET       /users/:user_id/blogs(.:format)           blogs#index
                POST      /users/:user_id/blogs(.:format)           blogs#create
 new_user_blog  GET       /users/:user_id/blogs/new(.:format)       blogs#new
edit_user_blog  GET       /users/:user_id/blogs/:id/edit(.:format)  blogs#edit
     user_blog  GET       /users/:user_id/blogs/:id(.:format)       blogs#show
                PATCH     /users/:user_id/blogs/:id(.:format)       blogs#update
                PUT       /users/:user_id/blogs/:id(.:format)       blogs#update
                DELETE    /users/:user_id/blogs/:id(.:format)       blogs#destroy               
         users  GET       /users(.:format)                          users#index
                POST      /users(.:format)                          users#create
      new_user  GET       /users/new(.:format)                      users#new
     edit_user  GET       /users/:id/edit(.:format)                 users#edit
          user  GET       /users/:id(.:format)                      users#show
                PATCH     /users/:id(.:format)                      users#update
                PUT       /users/:id(.:format)                      users#update
                DELETE    /users/:id(.:format)                      users#destroy
嵌入式路由体验出呢user和blog的关系,一对多可以这么定义




排除不需要的action和请求方式
resources :users, only: [:index, :destroy]




自定义路由
  resources :users do
  member do
  post :status
  end


  collection do
  get :online
  end
  end
status_user POST   /users/:id/status(.:format) users#status
online_users GET    /users/online(.:format)     users#online
上述会生成资源users路由外还生成呢上面连个路由,member路由是指由传id的被称为单数路由
collection路由是不传id的被称为集合理由,单个定义可以如下写法:
resources :users do
post :status, on: :member
get :online, on: :collection
end


Non-Resourcesful routes
# :action and :id are optional
# /photos/show/1 
# /photos/show
# /photos # => index action
get ':controller(/:action(/:id))'(括号中的参数可以传也可以不传)
  GET      /:controller(/:action(/:id))(.:format) :controller#:action


# /photos/show/1/2
get ':controller/:action/:id/:user_id'(严格匹配,必须传入id参数)
 GET  /:controller/:action/:id/:user_id(.:format) :controller#:action


match 'photos', to: 'photos#show', via: [:get, :post](一个路由可以定义多种请求)
photos GET|POST /photos(.:format)                      photos#show




Segment Constraints routes 
# /photos/A12345
get 'photos/:id', to: 'photos#show', constraints: { id: /[A-Z]\d{5}/ }(id做呢严格的限定)
GET  /photos/:id(.:format)                       photos#show {:id=>/[A-Z]\d{5}/}


根路由: "/"
root to: 'pages#main'
root 'pages#main' 
Prefix Verb URI Pattern Controller#Action
  root GET  /           pages#main


Routes
controller
controller :welcome do
  get '/welcome/hello'
end
       Prefix VerbURI Pattern              Controller#Action
welcome_hello GET  /welcome/hello(.:format) welcome#hello







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值