`
酷的飞上天空
  • 浏览: 522421 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

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

阅读更多

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编写REST风格的web应用

    1. **路由**:Rails的路由系统将URL映射到控制器的行动上,定义了资源的CRUD(Create, Read, Update, Delete)操作。例如,`resources :users`会自动创建对应的CRUD路径,如/users、/users/new、/users/:id、/users/...

    fearless-items:RESTful Ruby on Rails Web API提供项目

    2. `config/` - 配置文件,如数据库连接、路由设置等。 3. `db/` - 数据库相关的文件,如迁移(migrations)。 4. `lib/` - 自定义库和扩展代码。 5. `bin/` - 可执行脚本,如Rails服务器和任务脚本。 6. `spec/` - ...

    www.cn-ki.net_面向资源的RESTful Web应用研究1

    4. **配置路由**:在Rails中,配置routes.rb文件,将URI映射到相应的控制器和动作。 5. **实现视图**:编写HTML模板,展示资源的表示。 6. **测试与优化**:编写测试用例,确保应用功能正常,优化性能和用户体验。 ...

    rail on ruby

    ### Rails on Ruby 知识点概览 #### 一、Ruby on Rails 概述 - **定义**: Ruby on Rails(简称 ...通过以上知识点的学习,开发者可以全面了解 Ruby on Rails 的核心概念和技术细节,为实际开发项目打下坚实的基础。

    Raddit:我建立了一个类似于 Reddit 或 Hacker News 的链接聚合站点。 (Ruby on Rails)

    7. **路由系统**:Rails 的路由系统定义了 URL 映射到控制器的方法,确保用户请求能够正确处理。 8. **测试**:为了保证应用的质量,开发者通常会编写单元测试、集成测试和功能测试,如使用 RSpec、Capybara 和 ...

    Play_Framework_框架教程.pdf

    它的路由系统可以轻松地将URI参数绑定到Java方法上,例如定义一个GET请求的路由规则,将客户端请求的路径参数直接映射到Java方法中。 在模板引擎方面,Play并不依赖于JSP,而是提供了一种更加高效且易于接触模型的...

    RubyOnRails做的博客

    Ruby on Rails(简称RoR)是一个基于Ruby编程语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码的可读性。在这个"RubyOnRails做的博客"项目中,我们可以看到作者用RoR...

    simple-restful-api-源码.rar

    4. **路由**:源码中会有一个路由系统,将不同的URL映射到相应的处理函数。这可能是通过正则表达式或特定的框架功能实现的。 5. **请求和响应**:源码会处理HTTP请求的头部、主体和参数,以及构造HTTP响应。这可能...

    RESTful Web Service 课件下载.pdf

    - **RESTful路由**:通过定义路由,可以自动地为不同的HTTP动词映射到相应的控制器动作。 - **资源控制器**:每个资源都对应一个控制器,处理与该资源相关的CRUD操作。 #### 五、消费RESTful Web服务 消费RESTful ...

    rest-api-laravel:Projeto usando Rest API com Laravel

    通过这个项目,开发者可以学习如何在Laravel中设置路由、创建控制器、处理数据库交互,并利用其内置功能如中间件和Eloquent ORM,来构建高效、健壮的API服务。对于想深入了解PHP和Laravel的开发者来说,这是一个很好...

    rocketseat-nlw:此回购是关于Rocketseat NLW中的事件,当我需要使用Elixir创建rest api时

    在NLW活动中,你可能学习了如何设置新的Phoenix项目,理解Phoenix的结构,以及如何定义路由、控制器和模型。 首先,Phoenix项目通常包含几个关键目录,如`lib`、`web`、`config`等。`lib`目录下是项目的主应用模块...

    MusicTaste-API:后端到Music Taste Web应用程序

    2. **路由配置**:在Ruby中,使用Rails框架的话,会用到`config/routes.rb`文件来定义路由规则,将URL映射到特定的控制器动作,确保请求能够正确地处理。 3. **控制器与模型**:Ruby on Rails中的MVC(Model-View-...

    DigitaleArchiveAndCanon

    Ruby on Rails通常与SQLite、MySQL或PostgreSQL等数据库系统配合使用,通过ActiveRecord库实现ORM(对象关系映射),使得开发者可以使用Ruby代码操作数据库。 4. **RESTful API设计**: 为了实现不同系统间的交互,...

    代码段

    例如,创建一个简单的路由`Rails.application.routes.draw do get '/home', to: 'home#index' end`,映射到Home控制器的index动作。 8. 错误处理:Ruby通过`begin/rescue/ensure/finally`处理异常,如`begin ...

    nearby-places-api

    - 路由使用`get`、`post`、`put`、`delete`等方法,将HTTP请求映射到处理函数。 - 视图模板:Sinatra可以与多种模板引擎(如ERB、Haml、Slim)集成,用于生成HTML响应。 3. **RESTful API设计**: - REST...

Global site tag (gtag.js) - Google Analytics