以MVC的思维方式来理解Ruby on Rails框架的设计结构

 更新时间:2016年05月27日 18:55:38   作者:ningandjin  
Ruby on Rails是Ruby世界中Web开发框架的代名词,人气相当之高,本文就带大家以MVC的思维方式来理解Ruby on Rails框架的设计结构,需要的朋友可以参考下

在rails中,发送一个请求(/users)的处理全过程如下:
1)、浏览器发送请求(/users)
2)、Rails的 routes会把请求路由给users_controller的index方法
3)、users_controller回调用User Model获取所有的user
4)、User Model会从数据库中把所有的user读取出来,
5)、User Model把从数据库读取出来的所有user封装为List返回给user_controller
6)、user_controlle把User Model返回user list赋值给实例变量@users,该变量会传递给index view
7)、index view接收传递过来的@users,并通过内嵌的ruby把view渲染为HTML
8)、user_controller把渲染好的页面返回给浏览器

不同的请求处理过程基本上一样,除了路由策略,即调用不一样的controller,或者controller的不同方法,具体的调用策略由Rails Router决定。

Rails Router
Rails中的针对Resource的路由策略完全遵守REST的设计风格,即URL只是负责定位资源,对资源的操作通过原生的HTTP Method类型来决定,只需要在routes.rb中配置上resources :users,就可以得到如下的一系列路由策略:

HTTP request  URI    Action   Purpose 
GET     /users   index  page to list all users 
GET     /users/1   show    page to show user with id 1 
GET     /users/new  new    page to make a new user 
POST     /users    create   create a new user 
GET     /users/1/edit edit    page to edit user with id 1 
PUT     /users/1   update   update user with id 1 
DELETE   /users/1   destroy  delete user with id 1 

当然,除了REST风格的各种routes, Rails还支持各种定制的routes规则,方法如下:在routes.rb中加上语句

match 'user/create' => 'users#new', :via => :get 

 
该规则匹配的是浏览器浏览/user/create,Rails会将请求路由到users_controller的new方法上,其他的处理都和/users/new一样。不过要注意的是,Rails会使用第一个匹配上的规则,如果我们把上面的那条route语句改为

match 'users/create' => 'users#new', :via => :get 

,其就不会按我们设想的工作了,其会匹配到到规则

GET    /users/1   show    page to show user with id 1


即获取id为created的user。

相关文章

  • Ruby中的集合编写指南

    Ruby中的集合编写指南

    这篇文章主要介绍了Ruby中的集合编写指南,作者提出了编程过程中集合方面的一些需要注意的地方,需要的朋友可以参考下
    2015-08-08
  • 详解Ruby中范围的概念

    详解Ruby中范围的概念

    这篇文章主要介绍了详解Ruby中范围的概念,需要的朋友可以参考下
    2015-05-05
  • 简要解读Ruby面向对象编程中的作用域

    简要解读Ruby面向对象编程中的作用域

    作用域在面向对象编程中是一个十分重要的概念,程序构建时必须要理解清楚类和方法以及对象的作用范围,接下来就为大家简要解读Ruby面向对象编程中的作用域
    2016-05-05
  • 详解Ruby中正则表达式对字符串的匹配和替换操作

    详解Ruby中正则表达式对字符串的匹配和替换操作

    这篇文章主要介绍了Ruby中正则表达式对字符串的匹配和替换操作,包括对结果分组和一些特殊全局变量的介绍,需要的朋友可以参考下
    2016-04-04
  • 深入理解Ruby中的代码块block特性

    深入理解Ruby中的代码块block特性

    听到代码块这个翻译,你或许会联想到类或者结构体,但block并不是这些东西,这里就带着大家来深入理解Ruby中的代码块block特性
    2016-05-05
  • 举例讲解Ruby中require的使用方法

    举例讲解Ruby中require的使用方法

    这篇文章主要介绍了Ruby中require的使用方法,用其来各种引用文件路径,需要的朋友可以参考下
    2015-07-07
  • ruby实现github第三方认证

    ruby实现github第三方认证

    GitHub在用户认证过程中采用了双匙机制,在双匙加密机制中,只有合法用户才拥有私匙,只要GitHub在收到请求时可以证明提交请求的客户端上拥有该私匙,即可以确认该操作是由合法用户发起的。我们通过ruby来简单模拟下吧。
    2015-06-06
  • CentOS中配置Ruby on Rails环境

    CentOS中配置Ruby on Rails环境

    经过一个上午的折腾,终于把ROR环境在CentOS中搞定,绕了很多弯路,把文章写下来总结一下
    2014-03-03
  • ruby中的循环语句总结

    ruby中的循环语句总结

    这篇文章主要介绍了ruby中的循环语句总结,本文总结了Ruby中常用的一些循环语法,需要的朋友可以参考下
    2015-05-05
  • Ruby中的迭代器详解

    Ruby中的迭代器详解

    这篇文章主要介绍了Ruby中的迭代器详解,本文讲解了字符串、数字、数组、Map、文件、目录等情况下使用迭代器的例子,需要的朋友可以参考下
    2014-09-09

最新评论