当前位置:首页 > 开发 > 编程语言 > Ruby > 正文

Rails学习之路由设置(URI映射)

发表于: 2010-06-12   作者:酷的飞上天空   来源:转载   浏览:
摘要: URL的映射规则,在config/routes.rb文件中。这是一个ruby类,不是配置文件。 设置默认主页的映射,例子: map.root :controller => "home" 这表示网站的主页的控制器为home,action为index。当然还要把public下的index.html移出或改下名字。   map.connect 'book/:

URL的映射规则,在config/routes.rb文件中。这是一个ruby类,不是配置文件。

设置默认主页的映射,例子:

map.root :controller => "home"

这表示网站的主页的控制器为home,action为index。当然还要把public下的index.html移出或改下名字。

 

map.connect 'book/:bookid',:controller=>'book',action=>'show'

匹配路径

http://localhost:3000/book/1

 

上面:controller和:action是绑定的,当一个URL匹配到这个路由信息时,他就把请求定位到指定的控制器和动作上。在控制器中使用params[:bookid]可以取得id的值1

 从此规则中生成URL则如下例子:

<%= link_to "book1",:controller=>"book",:action=>"show",:bookid=>1  %>

:controller的book和:action的show回到上面路由规则。生成的连接如上。

book/:bookid 中book是一个静态的字符串,而:bookid是一个通配符。当有人访问book/bookid的路径时就会转到对应的控制器。link_to 调用中,其参数符合以上路由信息的匹配,所有就以此路由信息为蓝本生成了URL。

 

默认的路由信息

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

这个理由信息包含三个接收器,controller,action,id

如:http://localhost:3000/book/show/1,则会对应到控制器book,动作show,参数id值为1。可以看出这和上面的http://localhost:3000/book/1访问的是相同的控制器和动作,并且参数也相同。所获得的返回结果自然也相同。

在此处的:id,为控制器中可以取得的参数.

 

如果修改默认的路由信息

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

则生成及访问的路由为:http://localhost:3000/show/book/1

 

编写自己的路由规则

map.connect ":id" ,:controller=>"book",:action=>"show"

可以识别如下URL

http://localhost:3000/1,系统将:id设置为1,然后运行控制器book以及动作show。

 

map.connect "mybook/:id" :controller=>"book",:action=>"delete"

识别URL

http://localhost:3000/mybook/1

同时<%= link_to "book1",:controller=>"book",:action=>"delete",:id=>1  %>则会生成上面的URL

 

有一个疑问,如果URL是http://localhost:3000/mybook/a呢?会不会匹配到上面的规则呢?

答案是当然会,可是我们的id是个数字,如果传进来一个字符岂不是有点乱套。怎么才能只让数字的id匹配呢?

使用正则表达式
map.connect "mybook/:id" ,id=>/\d+/,:controller=>"book",:action=>"delete"

或者map.connect "mybook/:id" ,:controller=>"book",:action=>"delete",:requirements=>{:id=>/\d+/}

这样我们的路由规则就只对id为数字的URL生效了

 

创建具名路由

具名路由的具体方法是使用名字调用映射对象方法,并用它取代通常的连接

如:

map.books 'books',:controller=>"book",:action=>"show_all"

在这个例子中可以得到,books_url和books_path两个方法,这两个方法可以再URL和URL组件中使用,不同之处是url生成完整的路径,而path则只是路径的一部分(可以任务是相对路径)

如:<%= link_to "全部","books_url" %>则生成<a href=http://localhost:3000/books>全部</a>。当点击连接后,控制器book的show_all方法会被调用。

 

特殊的范围方法 with_options

观察以下具名路由

map.help "/help",:controller=>"home",:action=>"help"

map.contact "/contact",:controller=>"home",:action=>"contact"

map.about "/about",:controller=>"home",:action=>"about"

可以使用以下具名路由替代

map.with_options  :controller=>"home" do |h|

h.help "/help",:action=>"help"

h.contact "/contact",:action="/contace"

h.about "/about",:action=>"about"

end

 

Rails学习之路由设置(URI映射)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一、一对多 "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系。一对多:从消费者角的度
最近因为工作需要学习WPF方面的知识,因为以前只关注的是B/S架构的东西,可是没想到参加工作的第一
总的来说,我们可以通过RouteTable的静态属性Routes得到一个基于应用的全局路由表,通过上面的介绍
总的来说,我们可以通过RouteTable的静态属性Routes得到一个基于应用的全局路由表,通过上面的介绍
def index unless params[:path].blank? @path = params[:path] @route = ActionController::Routin
MVC In Rails 在rails中,发送一个请求(/users)的处理全过程如下: 1)、浏览器发送请求(/users)
MVC In Rails 在rails中,发送一个请求(/users)的处理全过程如下: 1)、浏览器发送请求(/users)
路由映射( route map )的基本规则 路由映射的逻辑结构有点类似于一般编程语言里的 If/Then/Else
路由映射实战 试验环境: 在R1上配置三个环回口,模拟路由器R1的其他网段,R2为边缘路由器 在A上做
路由映射实战二 本篇博文和上一篇是紧密结合的,只是在上个试验的基础上作了改动,达到其他的试验效
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号