`
mike.gao
  • 浏览: 48547 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

rails 路由

阅读更多
4 正则路由
Rails支持正则路由——是把URLs映射到控制器和方法上。可以应用程序中使用RESTful路由和正则路由两种风格。建议多使用RESTful风格,因为这更容易编写和阅读。

4.1 Bound Parameters
设置正则路由的时候,:controller映射控制器的名称,:action映射方法的名称。例如默认的Rails路由:
map.connect ':controller/:action/:id'
如果请求是/photos/show/1,就会和这个路由做相当的匹配,就会是调用Photos控制器中的show方法,并把这个:id传入params[:id]。

4.2 通配符组件
如果你愿意,可以设置很多的通配符号:
map.connect ':controller/:action/:id/:user_id'
请求的URL是/photos/show/1/2,就会调用Photos控制器中的show方法,params[:id]就设为1,params[:user_id]就设为2。

4.3 静态文本
当创建一个路由时,可以指定一个静态的文本,例如:
map.connect ":controller/:action/:id/with_user/:user_id"
应答的路径就像这样/photos/show/1/with_user/2

4.4 Querystring参数
Rails路由在params哈希中自动选出querystring参数。例如:
map.connect ':controller/:action/:id'
/photos/show/1?user_id=2这个路径进来,就会分配Photos控制器的show方法来处理,params[:id]设为1,params[:user_id]设为2。

4.5 定义默认值
给:controller和:action设定默认值:
map.connect 'photos/:id', :controller => 'photos', :action='show'
就样可以匹配这样的路径:/photos/12

还可以使用:defaults选项:
map.connect 'photos/:id', :controller => 'photos', :action => 'show', :defaults => { :format => 'jpg' }
就同样匹配这样的路径:/photos/12,并且params[:format]设为jpg。

4.6 命名路由
命名路由就不使用connect方法了,可以使用其他的名称来创建一个命名路由。例如:
map.logout '/logout', :controller => 'sessions', :action => 'destroy'
这个路会做两件事,首先,/logout请求将被发送给Sessions控制器的destroy方法。Rails会生成logout_path和logout_url辅助方法。

4.7 路由需求
使用:requirements选项为路由参数指定一种格式:
map.connect 'photo/:id', :controller => 'photos', :action => 'show', :requirements => { :id => /[A-Z]\d{5}/ }
这个路由应答像/photo/A12345这样的URLs。也可以简写:
map.connect 'photo/:id', :controller => 'photos', :action => 'show', :id => /[A-Z]\d{5}/

4.8 路由条件
可以用:conditions选项来约束路由,现在来约束:method:
map.connect 'photo/:id', :controller => 'photos', :action => 'show', :conditions => {:method => :get}
在RESTful路由使用:conditions,可以具体指定:get, :post, :put, :delete, 或者 :any给:method。

4.9 路由通配符
路由通配符是一种指定一个详细的参数去匹配路由剩余部分的方法。例如:
map.connect 'photo/*other', :controller => 'photos', :action => 'unknow'
这个路由会匹配photo/12或者/photo/long/path/to/12,并且为params[:other]创建一个数组。

4.10 路由选项
使用:with_options把相似路由分成一组:
map.with_options :controller => 'photo' do |photo|
photo.list '', :action => 'index'
photo.delete ':id/delte', :action => 'delete'
photo.edit ':id/edit', :action => 'edit'
end


5 格式和respond_to
使用:format参数让路由可以根据不同的HTTP请求格式做不同的处理:
map.connect ':controller/:action/:id.:fromat'
匹配/photo/edit/1.xml或者/poto/show/2.rss。在控制器的方法中,能够对不同的请求作出应答:
respond_to do |format|
format.html
format.xml {render :xml => @photo.to_xml}
end

5.1 用Http Header指定格式
如作没有:format参数,Rails将自动认为是HTTP Accept格式。

5.2 元类型
默认情况下,Rails能对html, text, json, csv, xml, rss, atom和yaml做出应答。如果还需要其他类型,可以在环境中注册它:
Mime::Type.register "image/jpg", :jpg


6 默认路由
当创建一个Rails应用时,routes.rb就会自动生成两个默认路由:
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
如果你不使用RESTful风格的路由,这个路由为很多URLs就提供了合理的默认值。

7 空路由
不要和默认路由混淆,空路由有它明确的目的:为web站点指定根路径。以example.com为例,以http://example.com或者http://example/来请求,就会由空路由来匹配。

7.1 使用map.root
使用map.root设定空路由:
map.root :controller => 'pages', :action => 'main'使用root方法,是告诉Rails就是请求站点的根路径。

为了更方便阅读, 可以指定一个已经创建好的路由给map.root:
map.index 'index', :controller => 'pages', :action => 'main'
map.root :index

由于是从上至下处理文件,所以必须在调用map.root指定命名路由。

7.2 连接空字符串
也可以使用连接空字符串来指定空路由:
map.connect '', :controller => "pages", :action => "main"

假若指定了空路由,但发现它好像并没有工作,首页还是Rails的默认页面,那么请删除public/index.html文档后再试。

8 检查和测试路由
在应用程序中,路由不应该是个黑盒子,它对你是永远开放的。Rails为检查和测试路由提供了内建的工具。

8.1 用rake查看存的路由
在应用程序中,如果想查看路由列表,可以运行rake routes。它会列出你在routes.rb定义的全部路由。
users GET /users          {:controller=>"users", :action=>"index"}
formatted_users GET /users.:format {:controller=>"users", :action=>"index"}
POST /users          {:controller=>"users", :action=>"create"}
POST /users.:format {:controller=>"users", :action=>"create"}

8.2 测试路由
Rails内建了三个断言来做路由测式
·assert_generates
·assert_recognizes
·assert_routing

8.2.1 assert_generates
使用assert_generates断言一个设置选项生成的特定路径。
assert_generates "/photos/1", { :controller => "photos", :action => "show", :id => "1" }
assert_generates "/about", :controller => "pages", :action => "about"
还可以提供:method参数:

8.2.2 assert_recognizes
assert_recognizes断言反转的assert_generates。在应用程序中它断言Rails认可的给定的路径和路由到一个特定的位置。
assert_recognizes { :controller => "photos", :action => "show", :id => "1" }, "/photos/1"
可以使用:method参数:
assert_recognizes { :controller => "photos", :action => "create" }, { :path => "photos", :method => :post }
能够使用RESTful辅方法测试RESTful路由:
assert_recognizes new_photo_url, { :path => "photos", :method => :post }

8.2.3 assert_routing
assert_routing是断言检测路径生成选项和选项生成路径,它是assert_generates和assert_recognizes的联合:
assert_routing { :path => "photos", :method => :post }, { :controller => "photos", :action => "create" }
分享到:
评论

相关推荐

    rails路由之图文解释

    让你知道在rails中如何使用路由,路由与URL是如何对应的。

    routing-filter 包裹了 Rails 路由系统的复杂野兽,在 Rails URL 识别和生成中提供了看不见的灵活性

    routing-filter 包裹了 Rails 路由系统的复杂野兽,在 Rails URL 识别和生成中提供了看不见的灵活性和强大功能 路由过滤器围绕着复杂的野兽,Rails 路由系统在 Rails URL 识别和生成中提供了看不见的灵活性和强大...

    Ruby on Rails路由拒绝服务漏洞

    本文发布Ruby on Rails路由拒绝服务漏洞,指出它影响到的系统、不受它影响的系统以及提供给用户厂商补丁下载的地址。

    关于Ruby on Rails路由配置的一些建议

    ### 关于Ruby on Rails路由配置的一些建议 在Ruby on Rails框架中,路由是连接用户请求和应用程序逻辑的关键组成部分。正确的路由配置不仅能提高代码的可读性和维护性,还能帮助开发者更好地组织应用结构。本文将...

    路由过滤器:路由过滤器围绕着Rails路由系统所包含的复杂野兽,在Rails URL识别和生成中提供了看不见的灵活性和强大功能

    路由过滤器 路由过滤器围绕着Rails路由系统所要面对的复杂的野兽,以实现Rails URL识别和生成中看不见的灵活性和强大功能。 尽管Rails的路由功能强大而强大,但是当您需要以稍微离开Rails约定铺平道路的方式来设计...

    Ruby-Annotate注释Rails类模式和路由信息

    **Rails路由信息** 是Rails应用程序中控制HTTP请求如何映射到控制器动作的重要部分。注释路由信息可以让你看到每个资源的RESTful操作(如index、show、new、create、edit、update、destroy)及其对应的URL模式。这...

    restikle:在 iOS RestKit+CDQ 项目中轻松使用 Rails 路由和模式

    在 iOS RestKit+CDQ 项目中轻松使用 Rails 路由和模式。 安装 将此行添加到应用程序的 Gemfile 中: gem 'restikle' 然后执行: $ bundle 或者自己安装: $ gem install restikle 注意:非常初步的发布 这是...

    rails_routing_guide

    Rails路由指南 Rails路由是Ruby on Rails框架中处理HTTP请求的部分,它负责将外部的URL映射到控制器的相应动作上。通过阅读本指南,您可以了解到如何理解routes.rb文件中的代码,如何创建和自定义路由,以及如何...

    Rails入门教程一(翻译).pdf

    教程会解释如何配置和使用Rails路由,以及资源路由的概念。 模型部分会涉及ActiveRecord的生命周期,包括创建、读取、更新和删除(CRUD)操作,以及关联(Associations)如一对一、一对多、多对多等,这些关联让...

    ruby_on_rails 源代码上

    4. **Rails路由** Rails的路由系统是其强大功能的一部分,它负责将URL请求映射到特定的控制器方法。通过配置`config/routes.rb`文件,开发者可以定义资源、命名路由、约束以及定制化的路由规则。 5. **视图模板** ...

    Ruby on Rails 指南 v5.0.1 中文版

    - **Rails路由的用途**:解释Rails路由系统的作用。 - **资源路由:Rails的默认风格**:详细介绍Rails默认的资源路由模式。 - **非资源式路由**:介绍非资源式路由的应用场景。 - **自定义资源路由**:展示如何...

    inspinia_admin_v2.5_Rails_Full_Version

    9. **路由(Routes)**:Rails路由配置,定义了URL到控制器方法的映射,确保URL结构清晰且易于维护。 10. **测试**:可能包含单元测试和集成测试,确保代码的质量和功能的正确性。 通过使用Inspinia Admin Rails全...

    Rails相关电子书汇总二

    2. **Rails路由**:理解路由的配置和工作方式,包括资源路由、命名路由、条件路由和自定义路由。 3. **Rails控制器和动作**:掌握控制器如何处理请求,以及如何利用过滤器、辅助方法和HTTP状态码来优化控制器行为。...

    Rbuy for Rails源代码

    5. **路由配置**:学习Rails路由的配置方式,如资源路由、命名路由、约束和条件。 6. **视图模板**:理解ERB(嵌入式Ruby)模板语言,以及如何使用辅助方法和布局来构建用户界面。 7. **控制器**:控制器在MVC中的...

    ember-cli-rails-源码.rar

    Ember CLI Rails处理Ember应用的路由与Rails路由的同步。这通常涉及到Rails的`config/routes.rb`文件和Ember的`app/router.js`。源码分析会揭示如何在两者之间建立映射。 7. **ember-data与Rails API** Ember ...

    rails-react-components-源码.rar

    源码可能包含如何配置React Router与Rails路由协同工作的示例,以实现客户端和服务器端的无缝切换。 7. **测试与TDD** Rails与React的项目同样需要全面的测试覆盖。了解源码中的测试结构,如React组件的单元测试...

    rails 开发手册

    7. **Rails路由**:Rails的路由系统将URL映射到控制器动作。学习如何设置路由规则,以及如何使用资源路由是至关重要的。 8. **Asset Pipeline**:Rails的资产管道处理CSS、JavaScript和其他静态资源。手册会介绍...

    rails22cn.pdf

    - **内容概述**:专注于 Rails 路由系统的高级指南,涵盖了路由的基础知识以及更复杂的路由策略。 - **其他相关书籍**:除了上述书籍外,还有关于重构、插件、视频教程等方面的内容。 通过以上信息,我们可以看到...

    ruby on rails

    - **Rails路由**:定义应用程序URL结构,将URL映射到控制器的特定动作上。 3. **Rails开发流程**:创建模型(generate model)、迁移数据库(db:migrate)、创建控制器(generate controller)、编写视图,以及...

Global site tag (gtag.js) - Google Analytics