`
BlueFuture
  • 浏览: 53287 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

rails中的路由设置

    博客分类:
  • ROR
阅读更多

一、 路由规则

1 路由文件
config/routes.rb 文件建立了外部请求与应用程序的连接

2 路由设置查看
应用程序路由定义在 RoutSet 对象中,该对象保存在 ActionController::Routing 模块的常量 Routes 中,在 console 中通过 ActionController::Routing::Routes.routes 方法可以访问到 . (为了简单后面用变量 rs )

3 给定 URL 查看路由文件中是否有相应的配置
rs.recognize_path “/xxxx” 若有此配置则 =>{….}

4 给定任意参数查看所生成的 URL

rs.generate(:controller=>:xxx,:action=>:yyy………)

5 把尚未编写出的控制器加入路由配置
ActionController::Routing::use_controllers! [“xxx”,”yyy”,”zzz”]

注意:用 rails 框架可一同生成路由和控制器

6 重新装载路由定义
在 console 中执行 load ”config/routes.rb” 一般在执行 5 后做此操作

二、 用 map.connect 定义路由规则

1 规则( map.connect 的主要参数在‘‘中)
路由中 map.connect  ‘ 期中设置规则 ’ 如 map.connect ‘:controller/:action/:id’

注意:
1)  配置中以 :xxxx 形式的部分将得到 URL 中对应的值,形成键 - 值的 hash 参数,如 xiaofeng/nb/1 这个 URL 中的 xiaofeng 将成为键 :controller 的值, nb 也一样

2)  配置中以 *xxxx 形式的部分将得到 URL 对应部分以后的所有值,与 :xxxx 模式类似,不过 *xxxx 的位置始终在路由配置的最后 如 ’:controller/:action/*xxxx’ 与此同时 *xxxx 得到的将是一个 hash 而不只是一个值

3)  主要参数中的非 :xxxx 形式与 *xxxx 形式当且仅当 URL 中与之对应时才会匹配上,如‘ story/:controller/:id ’与之匹配的 URL 必须第一个字段为 story

4)  :controller 与 :action 可以出现在主要参数的单引号中,也可以出现在下面将要介绍的其他参数中,以 hash 的形式来指定他们所对应的值

5)  对 URL 匹配对应的路由时会根据 routes.rb 中声明的顺序逐一匹配,并使用第一条符合的路由规则

2 map.connect 接受的另一些参数(除 :controller 和 :action )
1)  :defaults=>{:name=>’value’, …… }

为模式中命名参数设置默认值。如果一个模式的组成部分有默认值,可以在 URL 中省略。 Routing 下默认提供了 defaults=>{:action=”index”,:id=>nil}

2)       :requirements=>{:name=>/regexp/, …… }
特定组成部分必须与指定的正则表达式一一匹配

3)       :conditions=>{:name=>/regexp/orstring , …… }
该参数指定请求的动词,如 :conditions=>{:method=>:get},

4)       :name=>value
设置 :name 参数的默认值,与 :defaults 的区别为其指定的 :name 的默认值对主要参数部分有此 :name 的路由模式不起作用( :name 的值以 URL 中给定的值为准则),除非 URL 中没有给定对应的值并且 :defaults 没有指定其默认值时此参数有效
一般情况下有 :name=>value 指定的参数为定死的,而不是路由给出的

三、 生成 URL

1 无名路由
url_for() 方法
接受一组 hash 并将其转化为 URL 地址

       如: url_for(:controller=>’store’, :action=>’display’, :id=>’123’)

              解析为 http://pragprog.com/store/display/123

当接受参数中有部分参数被省略时,被省略的参数的值有当前控制器对应的值代替

       如:当前 URL 为 http://pragprog.com/store/display

              url_for(:action=>’show’)  # URL =>http://pragprog.com/store/show

              被省略的 controller 被当前 controller 所代替了

当接受参数中使用 ActiveRecord 的对象作为参数时,则使用该对象数据库中的 id 值

       如: user=User.find(1)

              redirect_to(:action=>’show’, :id=>user)  # => /show/1

在控制器中动态改变服务器的默认配置 default_url_options()

       接受参数:见 P403

2 具名路由
既给 routes.rb 中的路由配置起名,可以通过访问“名称 _url ”来访问该路由配置

       如: map.index “blog/”, :controller=>”blog”, :action=>”index”

              index_url  # => http://pragprog.com/blog/

可以通过接受参数为具名路由传入 URL 参数

       如: map.show “blog/:id”, :controller=>”blog”, :action=>”show”

              show_url :id=>”1”  # => http://pragprog.com/blog/1

注: 定义的具名路由除了用 xxx­_url 外还可以用 xxx_path (不包含 xxx_url 中的协议、主机地址和端口,只包含路径)
3 有根路由
对于同一应用的开发和生产版本放到同一服务器上可以使用有根路由来区别不同应用下的相同功能

       如:同一应用的 blog 控制器在不同版本下的路由为

http://megablogworld.com/development/blog 开发模式

              http://megablogworld.com/project/blog 生产模式

设置有根路由:

1 在服务器配置文件中设置环境变量 RAILS_RELATIVE_URL_ROOT

2 在 config/environments.rb 文件中, 通过设置环境变量 ENV[‘RAILS_RELATIVE_URL_ROOT’] 或 ActionController::AbstractRequest.relative_url_root = "/other_url"

4 REST 和 Rails

Rails 支持增加一组 REST 风格的路由配置的接口:在 route 文件中设置

       map.resources:articlesjiang 控制器的路由将以 rest 风格来匹配 URL

Method
 URL path
 Action
 Helper
 
get
 /articles
 index
 articles_url
 
post
 /articles
 create
 articles_url
 
Get
 /articles
 new
 new_article_url
 
Get
 /articles/1
 show
 article_url(:id=>1)
 
Put
 /articles/1
 update
 article_url(:id=>1)
 
Get
 /articles/1;edit
 edit
 edit_article_url(:id=>1)
 
Delete
 /articles/1
 destroy
 article_url(:id=>1)
 

 

5 为 rest 添加自己的 Action

添加一个为一组资源提供的 action

map.resources:articles, :controller => {:recent => :get}

Method
 URL path
 Action
 Helper
 
get
 /articles;recent
 recent
 recent_articles_url
 

 

为某项资源添加一个 action

       map.resources:articles, :member => {:embargo => :put, :release => :put}

Method
 URL path
 Action
 Helper
 
put
 /articles/1;embargo
 embargo
 dmbargo_article_url(:id=>1)
 
put
 /articles/1;release
 release
 release_article_url(:id=>1)
 

 

只针对 action=>:new 来添加一个 action

       map.resources:articles, :new => {:shot => :put,}

Method
 URL path
 Action
 Helper
 
put
 /articles/new;shot
 shot
 shot_new_article_url(:id=>1)
 

 

6 rest 嵌套资源
声明嵌套资源路由

       map.resources :articles do |article|

              article.resources :comments

       end

Method
 URL path
 Action
 Helper
 
get
 /articles/1/comments
 index
 comments_url(:article_id=>1)
 
post
 /articles/1/comments
 create
 comments_url(:article_id=>1)
 
Get
 /articles/1/comments/new
 new
 new_comments_url(:article_id=>1)
 
Get
 /articles/1/comments/99
 show
 comments_url(:article_id=>1,:id=>99)
 
Put
 /articles/1/comments/99
 update
 comments_url(:article_id=>1,:id=>99)
 
Get
 /articles/1/comments/99;edit
 edit
 edit_comments_url(:article_id=>1,:id=>99)
 
Delete
 /articles/1/comments/99
 destroy
 comments_url(:article_id=>1,:id=>99)
 

 

7 选择数据表现形式( respond_to )
非 rest 风格的路由设置
map.store “/store/:action/:id.:format”, :id=>nil, :format=>nil

在控制器中用代码快如 action 中 show 控制器

def show

respond_to do |format|

       format.html

       format.xml {render :xml => @product.to_xml }

              format.yaml { render :text => @product.to_yaml }

       end

end

针对 /store/show/1.html, /store/show/1.xml, /store/show/1.yaml 将返回相应格式的内容

Rest 风格的路由设置
map.resources 所指定的路由规则默认开启了这项功能

8 路由测试
       断言指定选项会生成指定的路径

assert_generates(“/store”, :controller => “store”, :action => “index”)

断言给定的路径,路由将分析成一个 hash

Assert_recognizes({“controller”=>”store”, “action”=>”index”}, “/store”)

将上述两个断言结合起来即正向检查又反相检查

Assert_routing(“/store”, :controller =>”store”, :action => “index”)


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gift5168xf/archive/2009/10/08/4643062.aspx

分享到:
评论

相关推荐

    rails路由之图文解释

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

    Ruby on Rails:路由系统详解.docx

    Ruby on Rails:路由系统详解.docx

    Ruby on Rails中文指南

    通过配置`config/routes.rb`文件,你可以设置各种路由规则。 2. **模型(Models)**:模型代表了数据库中的数据和业务逻辑。Ruby on Rails使用ActiveRecord,一个ORM(对象关系映射)库,使得与数据库交互变得简单...

    rails 路由

    简要列出rails路由的方方面面简要列出rails路由的方方面面简要列出rails路由的方方面面简要列出rails路由的方方面面

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

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

    grape-rails-routes:为 Grape with Rails 添加路由打印

    这个 gem 将 Grape 的路由打印功能添加到 Rails 中。 用法 将此行添加到您的Gemfile gem 'grape-rails-routes' 然后通过以下方式查看您的路线 rake routes_with_grape 或(推荐)访问 ...

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

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

    rails指南 中文版

    1. **ActiveRecord**:这是Rails框架中的ORM(Object-Relational Mapping)组件,它负责处理数据库操作。通过ActiveRecord,开发者可以使用面向对象的方式来操作数据,而无需编写SQL语句。 2. **ActionController**...

    Ruby On Rails中文教材(PDF)

    3. **路由(Routes)**:Rails的路由系统定义了URL与控制器方法之间的映射,它是用户请求与应用交互的关键部分。 4. **ActiveRecord**:这是Rails中的ORM(对象关系映射)库,它允许开发者用Ruby代码操作数据库,...

    Rails项目源代码

    这个Rails项目提供了学习和研究Web开发的机会,特别是对于Ruby on Rails新手,可以通过阅读和理解源代码来提升技能,了解实际应用中Rails的用法。同时,对于有经验的开发者,这个项目也可以作为一个起点,进行二次...

    Rails 101 入门电子书

    - 如何在Rails中实现RESTful接口。 - **案例分析**: - 分析一个典型的RESTful应用示例。 #### 九、练习作业2-在Group里面发表文章-双层RESTFul - **目标**: - 在Group中添加Post功能。 - **实现过程**: - 创建...

    Rails

    5. **路由**:Rails的路由系统将URL映射到控制器的行动上,提供了一种灵活的方式来定义和管理应用的路由结构。 描述中提到的博文链接指向了一个ITEYE博客文章,尽管具体内容未提供,但通常这样的博客可能会包含...

    Rails101_by_rails4.0

    为了确保读者能够通过实践加深理解,书中还安排了一系列练习作业,从最基础的“Hello World”开始,逐步过渡到更复杂的概念,如Rails的Routing(路由)机制。路由机制是Web应用中一个非常核心的概念,它定义了不同的...

    rails-beginner-s-guide

    书中还涉及了如何使用Rails的路由帮助方法,如何在路由中加入条件判断,以及如何使用Rails的路由命名空间和作用域来组织代码。 路由系统与Rails的Action Controller紧密相连,Action Controller是Rails中负责处理...

    中文版rails教程

    在Ruby on Rails中,开发者可以快速构建功能丰富的动态网站,因为它提供了大量的内置功能和库,如数据库连接、ORM(对象关系映射)系统ActiveRecord、模板引擎ActionView以及路由系统ActionController等。...

    api-versions:一个管理您的Rails API路由端点的简单工具

    提供一个DSL,以对您的路由文件中的API进行版本控制,从而支持客户端标头而不是更改资源URL。 提供在目录文件中缓存和检索资源的方法,以防止文件混乱 提供一个生成器,以在继承先前版本的同时将您的API控制器扩展...

    The Rails 4 Way

    - **routes.rb文件**:这是Rails应用程序中配置路由规则的地方,通过编写不同的路由规则可以实现复杂的应用逻辑。 - **命名路由**:允许开发者通过名字引用路由,使得代码更具可读性,并且可以在路由规则改变时自动...

    rails学习教程

    Rails是David Heinemeier Hansson在2004年创建的,它引入了“Convention over Configuration”(约定优于配置)的理念,减少了开发者需要编写的基础设置代码,使得开发更加高效。Rails的另一个核心原则是“Don't ...

    Rails 3 in Action

    4. **路由**:Rails的路由系统允许灵活地定义URL到控制器动作的映射,书中介绍了如何设置资源路由、命名路由和自定义路由规则。 5. **ActiveRecord**:详述了ActiveRecord是如何作为对象关系映射(ORM)层工作的,...

Global site tag (gtag.js) - Google Analytics