默认路由:

Ruby代码  
  1. # Rails3:

  2. match '/:controller(/:action(/:id))'

  3. # Rails2:

  4. map.connect ':controller/:action/:id'

正则路由:

Ruby代码  
  1. # Rails3:

  2. match 'products/:id', :to => 'catalog#view'

  3. # Rails2:

  4. map.connect 'products/:id', :controller => 'catalog', :action => 'view'

命名路由:

Ruby代码  
  1. # Rails3:

  2. match 'logout', :to => 'sessions#destroy', :as => 'logout'

  3. # Rails2:

  4. map.logout 'logout', :controller => 'sessions', :action => ''

根路由:

Ruby代码  
  1. # Rails3:

  2. root :to => 'welcome#show'

  3. # Rails2:

  4. map.root :controller => 'welcome', :action => 'show'

路由简写技巧:
:to 键的省略:

Ruby代码  
  1. match 'account' => 'account#index'

  2. # 相当于:

  3. match 'account', :to => 'account#index'

  4. match 'info' => 'projects#info', :as => 'info'

注意:
:as 在rails3中是改变 helper, 在rails2中是改变 path

当路径和控制器(及action)一至时,可省略指派控制器部分

Ruby代码  
  1. match 'account/overview'

  2. # 相当于:

  3. match 'account/overview', :to => 'account#overview'

Verb路由
当需要限制http请求方法的时候通过键 :via ,也可以直接把方法写在最前面:

Ruby代码  
  1. get 'account/overview'

  2. # 相当于:

  3. match 'account/overview', :via => 'get'

  4. match 'account/setup', :via => [:get, :post]

  5. # 支持get\post\put\delete四种HTTP方法

resources路由:

Ruby代码  
  1. resources :posts, :except => [:index]

  2. resources :posts, :only => [:new, :create]

  3. # edit_post GET    /posts/:id/modify(.:format) {:controller=>"posts", :action=>"edit"}

  4. resources :posts, :path_names => { :edit => 'modify' }

  5. resources :projectsdo

  6. resources :tasks, :people

  7. end

  8. resources :productsdo

  9. collection do

  10. get  :sold

  11. post :on_offer, :search

  12. end

  13. get :buy, :on => :member

  14. post :batch, :on => :collection

  15. end

  16. resource :sessiondo

  17. get :create

  18. end

:shallow用法:
Rails3中的shallow用法与Rails2中一致

Ruby代码  
  1. resources :blogs, :shallow => truedo

  2. resources :comments

  3. end

使用:shallow前后相同部分:

blog_comments GET /blogs/:blog_id/comments(.:format) {:controller=>"comments", :action=>"index"}
blog_comments POST /blogs/:blog_id/comments(.:format) {:controller=>"comments", :action=>"create"}
new_blog_comment GET /blogs/:blog_id/comments/new(.:format) {:controller=>"comments", :action=>"new"}
blogs GET /blogs(.:format) {:controller=>"blogs", :action=>"index"}
blogs POST /blogs(.:format) {:controller=>"blogs", :action=>"create"}
new_blog GET /blogs/new(.:format) {:controller=>"blogs", :action=>"new"}
edit_blog GET /blogs/:id/edit(.:format) {:controller=>"blogs", :action=>"edit"}
blog GET /blogs/:id(.:format) {:controller=>"blogs", :action=>"show"}
blog PUT /blogs/:id(.:format) {:controller=>"blogs", :action=>"update"}
blog DELETE /blogs/:id(.:format) {:controller=>"blogs", :action=>"destroy"}

使用:shallow前后不同部分:
不使用shallow选项:

edit_blog_comment GET /blogs/:blog_id/comments/:id/edit(.:format) {:controller=>"comments", :action=>"edit"}
blog_comment GET /blogs/:blog_id/comments/:id(.:format) {:controller=>"comments", :action=>"show"}
blog_comment PUT /blogs/:blog_id/comments/:id(.:format) {:controller=>"comments", :action=>"update"}
blog_comment DELETE /blogs/:blog_id/comments/:id(.:format) {:controller=>"comments", :action=>"destroy"}

使用shallow选项后:

edit_comment GET /comments/:id/edit(.:format) {:controller=>"comments", :action=>"edit"}
comment GET /comments/:id(.:format) {:controller=>"comments", :action=>"show"}
comment PUT /comments/:id(.:format) {:controller=>"comments", :action=>"update"}
comment DELETE /comments/:id(.:format) {:controller=>"comments", :action=>"destroy"}

可以看出使用shallow选项后,对于已经存在的资源使用简化方式操作,具体行为涉及到 edit\show\update\destroy 四种
另外,shallow选项的有效范围是对自身及嵌套的资源都有效,如下面这个例子:

Ruby代码  
  1. resources :publishersdo

  2. resources :magazinesdo

  3. resources :albums, :shallow => truedo

  4. resources :photosdo

  5. resources :p_w_picpaths

  6. end

  7. end

  8. end

  9. end

这个例子中 albums、photos、p_w_picpaths 都会使用简化方式,而 magazines 不会。特别注意:这种嵌套方式极不推荐,一般嵌套的层级最好不要超过一级

scope路由
:path 改变Path,:module 改变Controller, :name_prefix || :as 改变  helper

Ruby代码  
  1. scope 'admin'do

  2. resources :posts

  3. end

  4. # 行当于:

  5. scope :path => 'admin'do

  6. resources :posts

  7. end

生成路由:

posts GET /admin/posts(.:format) {:controller=>"posts", :action=>"index"}
posts POST /admin/posts(.:format) {:controller=>"posts", :action=>"create"}
new_post GET /admin/posts/new(.:format) {:controller=>"posts", :action=>"new"}
edit_post GET /admin/posts/:id/edit(.:format) {:controller=>"posts", :action=>"edit"}
post GET /admin/posts/:id(.:format) {:controller=>"posts", :action=>"show"}
post PUT /admin/posts/:id(.:format) {:controller=>"posts", :action=>"update"}
post DELETE /admin/posts/:id(.:format) {:controller=>"posts", :action=>"destroy"}
Ruby代码  
  1. scope :module => 'admin'do

  2. resources :posts

  3. end

  4. # 相当于:

  5. resources :posts, :module => 'admin'

生成路由:

posts GET /posts(.:format) {:controller=>"admin/posts", :action=>"index"}
posts POST /posts(.:format) {:controller=>"admin/posts", :action=>"create"}
new_post GET /posts/new(.:format) {:controller=>"admin/posts", :action=>"new"}
edit_post GET /posts/:id/edit(.:format) {:controller=>"admin/posts", :action=>"edit"}
post GET /posts/:id(.:format) {:controller=>"admin/posts", :action=>"show"}
post PUT /posts/:id(.:format) {:controller=>"admin/posts", :action=>"update"}
post DELETE /posts/:id(.:format) {:controller=>"admin/posts", :action=>"destroy"}
Ruby代码  
  1. scope :name_prefix => 'admin'do

  2. resources :posts

  3. end

  4. # 相当于:

  5. resources :posts, :name_prefix => 'admin'

生成路由:

admin_posts GET /posts(.:format) {:controller=>"posts", :action=>"index"}
admin_posts POST /posts(.:format) {:controller=>"posts", :action=>"create"}
new_admin_post GET /posts/new(.:format) {:controller=>"posts", :action=>"new"}
edit_admin_post GET /posts/:id/edit(.:format) {:controller=>"posts", :action=>"edit"}
admin_post GET /posts/:id(.:format) {:controller=>"posts", :action=>"show"}
admin_post PUT /posts/:id(.:format) {:controller=>"posts", :action=>"update"}
admin_post DELETE /posts/:id(.:format) {:controller=>"posts", :action=>"destroy"}
Ruby代码  
  1. scope 'admin', :module => 'admin', :name_prefix => 'admin'do

  2. resources :posts

  3. end

  4. # 相当于:

  5. namespace 'admin'do

  6. resources :posts

  7. end

生成路由:

admin_posts GET /admin/posts(.:format) {:controller=>"admin/posts", :action=>"index"}
admin_posts POST /admin/posts(.:format) {:controller=>"admin/posts", :action=>"create"}
new_admin_post GET /admin/posts/new(.:format) {:controller=>"admin/posts", :action=>"new"}
edit_admin_post GET /admin/posts/:id/edit(.:format) {:controller=>"admin/posts", :action=>"edit"}
admin_post GET /admin/posts/:id(.:format) {:controller=>"admin/posts", :action=>"show"}
admin_post PUT /admin/posts/:id(.:format) {:controller=>"admin/posts", :action=>"update"}
admin_post DELETE /admin/posts/:id(.:format) {:controller=>"admin/posts", :action=>"destroy"}

在路由中定义跳转:

Ruby代码  
  1. match "/posts/github" => redirect("http://github.com/rails.atom")

  2. # 地址 /foo/1 会自动跳转到 /bar/1s

  3. match "/foo/:id", :to => redirect("/bar/%{id}s")

  4. # /account/proc/inosin 会自动跳转到 /inosins

  5. match 'account/proc/:name', :to => redirect {|params|

  6. "/#{params[:name].pluralize}" }

  7. match "/stories" => redirect {|p, req| "/posts/#{req.subdomain}" }

路由中的限制:

Ruby代码  
  1. # 限制 id 只能为数字

  2. match "/posts/show/:id", :to => "posts#index", :id => /\d+/

  3. match "/posts/show/:id", :to => "posts#index", :constraints => {:id => /\d+/}

  4. # 限制子域名

  5. match "photos", :constraints => {:subdomain => "admin"}

  6. # 限制访问者 IP

  7. constraints(:ip => /127.0.0.1/) do

  8. match  '/questions', :to => redirect("http://www.stackoverflow.com/")

  9. end

  10. # 当访问者 ip 是 192.168.1.* 的来访者访问 子域名为 "test"

  11. match "/ttt" => proc{|env| [200, {}, ["hello test"]]}, \

  12. :constraints => {:subdomain => "test", :ip => /192\.168\.1\.\d+/}

路由通配符:

Ruby代码  
  1. resources :photos, :id => /\d+/

  2. match 'photos/*other' => 'photos#unknown'

  3. #上面这两行路由则会把不符合7种path的其他url全部解析到PhotoController#unknown中去处理,params[:other]可得到path中/photos/之后的部分,注意这两行的顺序不能颠倒

  4. match 'books/*section/:title' => 'books#show'

  5. # 例如:books/some/section/last-words-a-memoir 中 params[:section] = "some/section", params[:title] = "last-words-a-memoir".

  6. match '*a/foo/*b' => 'test#index'

  7. # 例如:zoo/woo/foo/bar/baz 中 params[:a] = "zoo/woo", params[:b] = "bar/baz"

Rack:

Ruby代码  
  1. match "/foo", :to => proc {|env| [200, {}, ["Hello world"]] }

  2. match 'rocketeer.js' => ::TestRoutingMapper::RocketeerApp

  3. RocketeerApp = lambda { |env|

  4. [200, {"Content-Type" => "text/html"}, ["javascripts"]]

  5. }

转载自:http://www.verydemo.com/demo_c119_i4009.html

转载于:https://blog.51cto.com/bohsu/1208359

rails3 Route用法相关推荐

  1. ifconfig、ip addr、ip route用法总结

    最近使用haproxy+keepalived 负载均衡,发现虚拟IP有问题,配置文件里配的VIP是···.4.143 ,但是执行 ip a 发现还有一个虚拟IP···.4.134:应该是以前配置文件k ...

  2. rails3 正则路由

    rails3 正则路由 2010-10-16 Rails3 Route用法集锦 文章分类:Ruby编程 默认路由: Ruby代码 # Rails3: match '/:controller(/:act ...

  3. Linux系统基础网络配置老鸟精华篇

    对于linux高手看似简单的网络配置问题,也许要说出所以然来也并不轻松,因此仍然有太多的初学者徘徊在门外就不奇怪了, 这里,老男孩老师花了一些时间总结了这个文档小结,也还不够完善,欢迎大家补充,交流. ...

  4. sentinel接入网关应用_阿里Sentinel整合Zuul网关详解

    前面我们讲解了Sentinel整合Spring Cloud Gateway,详细请查看文章:阿里Sentinel支持Spring Cloud Gateway啦 目前来说,大部分公司线上的网关应该是Zu ...

  5. IP命令详解(强大的命令)

    IP命令详解(强大的命令) 简介 语法结构 OPTIONS选项 OBJECT对象 COMMAND命令 ARGUMENTS IP address ip link 语法 ip route 用法 显示路由信 ...

  6. Linux IPv6 HOWTO

    Linux IPv6 HOWTO Author:Peter Bieringer pb@bieringer.de 译者: 陈敏剑 expns@yahoo.com Revision Release 0.3 ...

  7. 【安全牛学习笔记】Smurf攻击、Sockstress

    Smurf攻击 世界上最古老的DDOS攻击技术 - 向广播地址发送伪造源地址的ICMP echo Request (ping) 包 - LAN所有计算机向伪造源地址返回响应包 - 对现代操作系统几乎无 ...

  8. 计算机网络和配置管理

    网络协议和管理配置 内容概述 网络概念 OSI模型 网络设备 TCP/IP IP地址规划 配置网络 多网卡绑定 网桥 网络测试工具 Ubuntu网络配置 <一>网络基础 1 网络基础 要掌 ...

  9. cmd长ping记录日志和时间_四个网络命令ping、arp、tracert、route的详细用法

    网络相关的从业人员,都需要面对检测和解决网络故障的各种问题,实际案例中因为网络导致的故障也是最多的,今天我们和大家一起来学习一下解决网络故障时使用最多的四个网络命令.希望对大家以后的实际工作中的故障排 ...

最新文章

  1. 科技边框_爱旭科技首创双面PERC电池PID FREE解决方案
  2. 2019第十届蓝桥杯比赛总结(B组c/c++)
  3. java stringbuffer原理_String,StringBuilder,StringBuffer 实现原理解析
  4. 自动化测试框架的一些建议
  5. libc.so.6linux查找,Linux中提示:/lib64/libc.so.6: version `GLIBC_2.17' not found 的解决办法...
  6. JimuReport积木报表,一个好用的开源免费的报表平台
  7. java讲对象放在常量池的方法_java的常量池里面都放了些神马东西
  8. Task类的简单介绍
  9. 为效能而生,企业级敏捷研发管理工具PingCode正式发布!
  10. micro framework php,index.php
  11. Java NIO学习与记录(七): Reactor单线程模型的实现
  12. 暖通空调材料进场如何验收?
  13. [python]python生成md5
  14. NumPy学习挑战第一关-NumPy的下载与安装
  15. 使用python控制其他软件运行_Python实现运行其他程序的四种方式实例分析
  16. flv文件修复工具——FLVMDI的使用方法
  17. 论文阅读--Emotion Recognition in Conversation: Research Challenges, Datasets, and Recent Advances
  18. 为BIG网站建立历史记录页面
  19. 104.网络安全渗透测试—[权限提升篇2]—[Linux之SUID提权]
  20. 戴尔t620服务器装系统2008驱动,dell服务器H310\H710阵列卡驱动

热门文章

  1. Linux卸载搜狐,搜狐的linux笔试题
  2. php发送邮件时间间隔,在使用phpmailer群发邮件时如何设置发送的时间间隔?
  3. 二级VB培训笔记09:真考题库试卷75演练
  4. 群论及Polya计数定理题目入门
  5. java+oracle数据库锁,数据库学习之Oracle数据库\记录被另一个用户锁住\解决方法...
  6. [HAOI2009]毛毛虫 dfs
  7. 2017.8.14 文本生成器 失败总结
  8. 【英语学习】【Level 07】U03 Amazing wonders L2 A global city
  9. 【Openstack】实录手动部署Openstack Rocky 双节点(3)- Glance
  10. 《软硬件接口》课程大纲