rails开发流程

来源:互联网 发布:淘宝卖家查看店铺粉丝 编辑:程序博客网 时间:2024/04/27 08:23

一个rails项目的目录如下图所示,这个目录可以通过”rails new 项目名称”生成

我们主要关注app,config,db这几个文件夹的内容。

app文件夹

app文件夹中含有rails项目的主要内容:

这里包含了MVC设计模式中的三个基本部分,即模型(model文件夹),视图(view文件夹),控制器(controllers文件夹)。

controllers文件夹:

其中每一个rb脚本就是一个控制器,具体用途。。。

view文件夹:

主要是储存网页页面的内容

其中每一个文件夹就是对应一个控制器的视图文件,其中一个文件夹中的内容:

这里的一个嵌入ruby的html文件就是一个网页的页面,可以看到一个控制器可以对应多个页面

Model文件夹:

这里每个rb脚本都对应一个模型文件,可以看到不是每个控制器都对应一个模型文件,只有需要使用数据库和数据库操作的才需要有模型文件。

config文件夹

Config文件夹主要是各种配置文件,我们要关注的主要是routes.rb文件,为了了解其作用我们先来了解下rails的执行流程。

         Rails严格遵循MVC模式,因此首先用户在浏览器中向控制器发出请求。控制器的action处理用户请求后,决定将指定的视图页面呈献给用户,而处理结果也在该视图页面中呈现。

         例如,在浏览器地址栏中输入了http://localhost:3000/user/show/1, rails处理这个请求的流程如下:

1.      为用户发送一个请求,rails路由器对请求进行解析,

2.      从而决定使用哪个控制器中的哪个action方法来处理用户请求。

         URL请求格式如下:http://域名:端口/控制器/控制器中action方法名/请求参数 ,

         因此,当用户发送URL请求,http://localhost:3000/user/show/1,rails将会在应用程序中找到,user控制器,调用show这个action方法,并将1这个参数传给该方法。

3.      控制器中的方法调用对应的模型对象的业务逻辑方法。模型对象继承

ActionRecord::Base类,因而具有持久化访问的能力,

         例如,当用户发送http://localhost:3000/user/show/1请求时,rails调用user控制器中的show方法来处理该请求。如果该方法增加以下代码:

         @user=User.find(params[:id])

这行代码实际上调用了,User模型(类)的find(1)方法,User模型类(继承自

ActionRecord::Base类)与数据库交互,查找user表中id为1的记录,并返回查询到的User实例,并将这个User实例设置成控制器的实例变量。

4.      控制器将处理结果交给视图文件,视图文件负责显示控制器的处理结果。Rails会保证

视图文件能访问到控制器中的实例变量。

         如果控制器没有显示的调用render方法将处理结果提交给视图页面,控制器默认把处理结果提交给app\views\控制器名\方法名.html.erb。对于上述请求,控制器user_controller默认将处理结果提交到app\views\user\show.html.erb。然后,在app\views\user\show.html.erb中访问控制器的实例变量@user获取数据库中的数据。

5.      视图文件发送相相应到用户的浏览器,最终结果呈现给用户。

 

这里的路由就是rails服务器工作流程的第一步。

 

 

 

下面我们从路由开始解析上面的例子

routes.rb的代码如下

resources :people root :to => "welcome#index"get "welcome/say_hello"=>"welcome#say"get "welcome" => "welcome#index"


get"welcome/say_hello"=>"welcome#say"就是一条简单的路由

这行代码的意思就是"welcome/say_hello"这个url对应的是welcome控制器中的say_hello方法。

 

而上面的resources :people这条语句是一个资源路由,资源路由提供了HTTP响应,控制器action和数据库CRUD操作之间的映射。

         这行代码事实上生成了7个不同的路由,这7个路由分别用于新增,查看,修改和删除等操作。每个路由对应的URL,方法,作用如表所示:

http响应

URL

对应的方法

作用

GET

/users

index

以列表形式显示所有数据

GET

/users/new

new

转到创建新数据的HTML页面

POST

/users

create

创建新的数据

GET

/users/1

Show

根据id显示单条数据

GET

/users/1/edit

Edit

根据id编辑数据

PUT

/users/1

Update

根据id更新数据

DELETE

/users/1

destroy

根据id删除数据

        

然后就到了控制器环节,首先我们了解一下控制器基类,ApplicationController::base

默认情况下,rails应用程序的application类继承自ActionController::base类,而其他的controller类均继承自application类。这样为我们提供了一个统一的接口。

         这个例子的people_controller.rb代码如下:

 

class PeopleController <ApplicationController before_action :set_person, only: [:show, :edit, :update, :destroy]   #GET /people  #GET /people.json  defindex   @people = Person.all  End………………………..

 

动作的默认模板放在app/views/控制器名称目录下,对应的是动作名称.html.erb文件,例如上述代码中的index动作会使用模板\app\views\people\index.html.erb,并传递默认的@people参数。

         \app\views\people\index.html.erb中的代码如下:

 

<h1>Listing people</h1>  <tbody>   <% @people.each do |person| %>     <tr>       <td><%= person.name %></td>       <td><%= person.bio %></td>       <td><%= person.birthday %></td>       <td><%= link_to 'Show', person %></td>       <td><%= link_to 'Edit', edit_person_path(person)%></td>       <td><%= link_to 'Destroy', person, method: :delete, data: {confirm: 'Are you sure?' } %></td>     </tr>   <% end %> </tbody></table> <br> <%= link_to 'New Person',new_person_path %>

 

这里将由控制器传过来的实例变量@people显示出来,这就是rails工作的整个流程。

0 0
原创粉丝点击