在一个Rails 应用程序中,进入的请求首先被发送给一个路由组件,该组件判断应该将请求发送到应用程序的什么部分、如何解析这一请求。这一阶段将找出控制器代码中的某个特定方法,要求它来处理请求(用Rails 的行话,这个方法叫做“action”)。action 可以查阅请求中携带的数据,可以与模型交互,也可以调用别的action。最后,action 会为视图准备充分的信息,视图则将所需的信息展现给用户。
Rails的路由是一个双重的机制,它既能将进入服务器的HTTP请求连接到你的controller,也能帮助你(在View内)生成URL,而不需要使用硬编码的字符串。
1. 从URL到代码
2. 从代码到URL
路由也可以反过来作用.如果你的应用包含了以下代码:
@patient = Patient.find(17)
<%= link_to “Patient Record”, patient_path(@patient) %>
那么,路由引擎就会把这段代码解释成这样的URL: http://example.com/patients/17。这样使用路由,比起硬编码URL,可以降低你的应用程序的脆弱程度(增加程序健壮性),并且可以增加代码的可读性,使你的程序更容易被理解。
Rails路由配置文件:routes.rb
在routes.rb文件中,共列举了5种主要路由,分别为默认路由(Default Routes)、资源路由(RESTful Routes)、命名路由(Named Routes)、嵌套路由(Nested Routes)、正则路由(Regular Routes)。
1. 默认路由 Default Routes
默认路由是创建应用时,Rails自动生成的,位于routes.rb文件的最后一行。
match ':controller(/:action(/:id(.:format)))'
默认路由由’/'分割为3部分,第一部分解释为控制器,第二部分解释为Action方法,第三部分变为相应参数传递。
例如,当有”http://domain.com/users/show/1″请求发生时,Rails去请求users控制器的show方法,并将id=1传递给show方法。
2. 资源路由 RESTful Routes
资源路由是Rails用来描述资源及其状态的,通俗些,就是用来描述数据库表/实体的相关数据操作。
值的注意的是,资源路由巧妙的使用了HTTP响应,完成了数据库CRUD操作(增加,查询,更新,删除)。例如:
resources :users
这样就产生了7种不同的路由,用来描述User的数据库操作。如下表所示:
HTTP响应 URL Action方法 描述
GET /users index 获取所有user数据
GET /users/new new 跳转到创建user页面
POST /users create 创建新的user
GET /users/1 show 获取id=1的user对象
GET /users/1/edit edit 编辑id=1的user对象
PUT /users/1 update 更新id=1的user对象
DELETE /users/1 destroy 删除id=1的user对象
这7中路由完成了资源的所有CRUD操作,与此同时,rails还为资源生成了一些辅助方法:
users_path : 映射了 index 和 create 方法的路径 ;
new_user_path : 映射了 new 方法的路径 ;
edit_user_path : 映射了 edit 方法的路径 ;
user_path : 映射了 show、update、destroy 方法的路径 ;
3. 命名路由 Named Routes
命名路由可以为任意一个确定的URL定义名称,该名称亦可用在控制器方法中,实现页面提交和重定向。例如:
match 'hello', :to => 'users#index', :as => 'hello'
使用上述代码后,Rails便知道’hello’需要调用users控制器的index方法。同时,还为该路由创建了两个辅助方法:
hello_path 和 hello_url : 映射了 users#index 方法的路径
4. 嵌套路由 Nested Routes
嵌套路由是用于声明一个资源包含另一个关联资源的访问方式。例如:博客系统的文章和评论两个资源就可以这样描述,因为评论应依附于文章存在,不应独立出来。于是便有:
# 直观的写法
resources :articles do
resources :comments
end
# 更简单的写法
resources :articles, :has_many => :comments
于是,当我们http://domain.com/articles/1/comments请求资源时,rails会理解为获取id=1的那篇文章的所有评论。
5. 正则路由 Regular Routes
正则路由的使用概率较低,但它却能完成非常严谨的路由访问。它可以为每个可变参数经行正则验证,只有通过验证的url,才会被指定到定义好的控制器方法中去。简单举个例子:
match 'users/search/:id/:age', :controller => 'users', :action => 'search', :age => /[2-5][0-9]/
上面的路由只有在age参数传递在20-59之间时才会被匹配,如http://domain.com/users/search/1/25,便会匹配成功;而http://domain.com/users/search/1/60,则不会被匹配。
###路由优先级###
在Rails中,路由生效的优先级是:从routes.rb文件定义的路由中从上到下依次匹配,最早匹配的路由会生效。也就是说routes.rb文件中的路由优先级从上到下依次降低。
当没有任何路由匹配到时,Rails会抛出Routing Error异常。
查看当前应用路由规则:rake routes
相关推荐
Chapter 4. Perform Fast Queries with Advanced Postgres Indexes Chapter 5. Create Clean Search Results with Bootstrap Components Chapter 6. Build a Dynamic UI with AngularJS Chapter 7. Test This Fancy ...
只需在config/routes/*.rb创建它们就可以了。 安装 将此行添加到您的应用程序的Gemfile中: gem "rails-routes" 然后执行: $ bundle 或自己安装为: $ gem install rails-routes 用法 将这个gem添加到您的项目...
Pragmatic - Agile.Web.Development.with.Rails.4.Sep.2013.pdf
通过对"rails-playlists-源码"的深入学习,开发者不仅可以理解Rails的基础知识,还能掌握如何在实际项目中运用这些知识,构建出功能完备且易于维护的Web应用。阅读源码是提升编程技能的绝佳方式,尤其是对于想要深入...
rails.macro 一个babel宏,可让JavaScript代码访问Ruby on Rails命名路由 安装 安装 (以及rails.macro )并将其添加到您的babel配置中: npm install --save-dev babel-plugin-macros rails.macro .babelrc : ...
- **全面覆盖 Rails 3**:Rails Recipes Rails 3 版本全面覆盖了 Rails 3 的新特性和改进之处,确保读者能够跟上框架的发展趋势。 - **实践导向**:本书采用实际案例和解决方案的形式,帮助读者快速解决问题,并且...
2. **Rails环境搭建**:学习如何安装Ruby、Rails以及相关的开发工具,如Git、SQLite、TextMate或Sublime Text等,创建第一个“Hello, World!”应用。 3. **Rails生成器**:Rails提供了许多命令行工具,如`rails ...
- Rails的路由系统是其强大特性之一,通过routes.rb文件定义URL到控制器方法的映射,允许灵活的URL设计和资源化路由。 3. **视图模板** - ERB(Embedded Ruby)或Haml是常见的Rails视图模板语言,用于创建动态...
Ruby on Rails:Rails框架入门.docx
将引擎添加到routes.rb : # config/routes.rb Rails . application . routes . draw do # ... if Rails . env . development? mount GraphiQL :: Rails :: Engine , at : "/graphiql" , graphql_path : "/your...
通过学习本书,读者不仅可以掌握Rails的基本操作,还能学会如何运用敏捷方法论优化开发流程,提高开发效率。尽管本书以Rails 2版本为基础,但对于Rails的后续版本,通过关注作者提供的维基页面,读者仍然可以顺利地...
Pragmatic.Bookshelf.Rails.for.PHP.Developers
4. **视图文件**:`app/views/rails_admin`目录下可能包含自定义的Rails Admin视图,用于展示邀请用户的相关表单和信息。 5. **路由配置**:在`config/routes.rb`中可能添加了与邀请相关的路由,使得用户可以通过...
3. **路由**:Rails的路由系统定义了URL到控制器动作的映射,通过`config/routes.rb`配置文件进行设定。通过资源路由,我们可以方便地创建与资源相关的RESTful API。 4. **ActiveRecord查询接口**:ActiveRecord...
Pragmatic.Bookshelf.Deploying.Rails.Applications.May.2008