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
分享到:
相关推荐
1. **路由**:Rails的路由系统将URL映射到控制器的行动上,定义了资源的CRUD(Create, Read, Update, Delete)操作。例如,`resources :users`会自动创建对应的CRUD路径,如/users、/users/new、/users/:id、/users/...
2. `config/` - 配置文件,如数据库连接、路由设置等。 3. `db/` - 数据库相关的文件,如迁移(migrations)。 4. `lib/` - 自定义库和扩展代码。 5. `bin/` - 可执行脚本,如Rails服务器和任务脚本。 6. `spec/` - ...
4. **配置路由**:在Rails中,配置routes.rb文件,将URI映射到相应的控制器和动作。 5. **实现视图**:编写HTML模板,展示资源的表示。 6. **测试与优化**:编写测试用例,确保应用功能正常,优化性能和用户体验。 ...
### Rails on Ruby 知识点概览 #### 一、Ruby on Rails 概述 - **定义**: Ruby on Rails(简称 ...通过以上知识点的学习,开发者可以全面了解 Ruby on Rails 的核心概念和技术细节,为实际开发项目打下坚实的基础。
7. **路由系统**:Rails 的路由系统定义了 URL 映射到控制器的方法,确保用户请求能够正确处理。 8. **测试**:为了保证应用的质量,开发者通常会编写单元测试、集成测试和功能测试,如使用 RSpec、Capybara 和 ...
它的路由系统可以轻松地将URI参数绑定到Java方法上,例如定义一个GET请求的路由规则,将客户端请求的路径参数直接映射到Java方法中。 在模板引擎方面,Play并不依赖于JSP,而是提供了一种更加高效且易于接触模型的...
Ruby on Rails(简称RoR)是一个基于Ruby编程语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码的可读性。在这个"RubyOnRails做的博客"项目中,我们可以看到作者用RoR...
4. **路由**:源码中会有一个路由系统,将不同的URL映射到相应的处理函数。这可能是通过正则表达式或特定的框架功能实现的。 5. **请求和响应**:源码会处理HTTP请求的头部、主体和参数,以及构造HTTP响应。这可能...
- **RESTful路由**:通过定义路由,可以自动地为不同的HTTP动词映射到相应的控制器动作。 - **资源控制器**:每个资源都对应一个控制器,处理与该资源相关的CRUD操作。 #### 五、消费RESTful Web服务 消费RESTful ...
通过这个项目,开发者可以学习如何在Laravel中设置路由、创建控制器、处理数据库交互,并利用其内置功能如中间件和Eloquent ORM,来构建高效、健壮的API服务。对于想深入了解PHP和Laravel的开发者来说,这是一个很好...
在NLW活动中,你可能学习了如何设置新的Phoenix项目,理解Phoenix的结构,以及如何定义路由、控制器和模型。 首先,Phoenix项目通常包含几个关键目录,如`lib`、`web`、`config`等。`lib`目录下是项目的主应用模块...
2. **路由配置**:在Ruby中,使用Rails框架的话,会用到`config/routes.rb`文件来定义路由规则,将URL映射到特定的控制器动作,确保请求能够正确地处理。 3. **控制器与模型**:Ruby on Rails中的MVC(Model-View-...
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 ...
- 路由使用`get`、`post`、`put`、`delete`等方法,将HTTP请求映射到处理函数。 - 视图模板:Sinatra可以与多种模板引擎(如ERB、Haml、Slim)集成,用于生成HTML响应。 3. **RESTful API设计**: - REST...