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
rails routes路由笔记
最新推荐文章于 2024-04-20 18:29:09 发布