Ruby on Rails框架(2)-MVC思想

前面,我们使用rails框架成功的创建了一个web应用程序,并显示了rails框架默认的欢迎方式,但欢迎页面是做不了任何事情的,因为它是一个静态的,默认的页面;如果我们想添加自定义的功能,就必须要写入代码,但是我们在添加自定义功能之前,一定要搞懂
一个在应用程序开发中非常非常重要,同时也是贯穿于rails开发框架始终的一种应用架构,叫做MVC设计模式,如果你长时间工作在产品开发的一线,那么你对MVC模式一定不陌生,如果你没有听所过,或者并不了解这种模式,没关系,本次分享,jacky将给你分享MVC模式的基本概念;

(一)为什么要介绍MVC

  • rails框架整体就完全使用的是MVC设计模式进行开发的,如果我们不明白MVC的相关概念,那jacky说,在我们开发的时候,肯定会遇到很多困惑,进而会影响我们的学习和我们应用开发的进程,为了让我们后面的学习更加顺畅,我们一定先要了解MVC模式的相关内容

(二)MVC模式的设计概念

2.1 什么是MVC模式

  • MVC是模型、视图、控制器的英文缩写,简单来说,它是一种将业务逻辑,数据以及界面显示三部分相分离的软件设计方式;

    • M:Model模型:对数据库的数据进行操作
    • V:View视图:让数据以漂亮的方式显示给用户
    • C:Controller控制器:协调和调度模型和视图的数据传输与流转

2.2 控制器中的action

  • 控制器(Controller)负责接收用户的请求,并且利用模式(Model)获取数据,并交给视图(View)进行显示,那在Controller里是怎样判断需要获取哪个数据,或者需要哪个视图去显示,它是怎样判断这样的东西呢?这就涉及到我们控制器中一个非常重要的概念action,action是控制器的基本组成单元,也就是说,一般情况下,一个控制器就是由很多个action组成的,控制器中每一个业务的逻辑的代码都写在每个action中,每一个action负责控制器的一个子功能,每当一个请求发往一个控制器的时候,控制器都要判断这个请求由哪个action处理,并将这个请求交给具体的action,再有action去调用模型获取数据,调用view显示数据,也就是说控制器本身并不处理请求,而是由其中的action去处理请求。

(三)Rails中的MVC

前面jacky跟大家详细的解释了什么是MVC设计模式,下面我们将在了解MVC模式的基础上,学习Rails框架中MVC的基本使用方法以及一些相关的Rails框架的命令、文件和结构,前面我们通过rails的安装和配置以及使用Rails的相关命令创建了一个web应用,并且显示出了一个rails的默认欢迎页面,但是这个页面还什么都做不了,因为我们还没有给页面添加任何东西,那我们怎么填加相应功能了,我们已经反复强调了rails框架是基于MVC设计模式编写的,因此它在应用上一定符合MVC设计模式的各种使用方法和特征,那MVC中添加一个完整的功能首当其冲的是controller控制器,我们需要控制器来接受用户的请求,我们要给rails框架添加功能,我们首要的就是给rails添加一个控制器

3.1 给Rails添加控制器

rails框架给用户提供了一套非常完整的命令来自动化生成用户所需要的物件,包括控制器、模型以及视图等等;

  • generate命令生成控制器

rails 创建控制器的一般使用命令就是生成命令generate ,这里jacky要强调的是generate命令并不能只生成控制器,它的使用方式有很多;rails generate controller+控制器的名称,这里我们把控制器的名称起名为welcome,意思是我们为当前这个rails框架添加欢迎功能,在页面上为用户显示欢迎信息

rails generate controller welcome

@数据分析-jacky

@数据分析-jacky

我们运行上面的代码后,rails命令自动生成了一系列的文件,这其中有视图文件、有样式文件、有测试文件等等、配套的很完善也很多;

  • 这里我们注意的是自动生成的views文件,jacky说,在一般情况下,控制器、视图以及模型在名称和功能上,他是相互对应的, views文件夹下自动生成了welcome组件,是非常的智能,这就体现了rails框架在开发上的敏捷和方便;因为很多工作rails已经帮你完成好了,所以对于python的django框架来说,rails框架是有很大优势的;你只要告诉rails你要生成一个控制器,那rails就会帮你生成一个与控制器相对应的视图;

  • 这里,可能有朋友会问,为什么我们没有看见与控制器相对应的模型models的控件呢?

    • 这里就涉及到models的功能,模型主要用于数据的交互,一个应用模型的数量往往决定于应用的数据种类,因为我们现在是新创建的应用,还没有任何数据可以存储,所以在这样的情况下,rails 是不会主动帮我们去创建模型文件,因此也就不会出现一个一一对应的模型;那到底什么时候会自动生成一个一一对应的模型呢?这就涉及到我们要说的资源assets,这里我们先不去赘述它,这里大家先理解,我们用generate命令生成控制器的时候,是不会自动生成一个对应的models模型,就可以了;
  • 我们先看一下控制器的定义,我们可以看到我们新建的welcome控制器继承叫ApplicationController的类,那我们ApplicatinController这个类就可以看成是rails框架中控制部件的基类(这涉及到类的概念以及类的继承,如果我们没有学过面向对象的编程,建议大家百度自学一下,或者看下jacky的python课程中对本部分的分享),在ApplicationController中就定义了绝大部分控制器所使用的方法,因此当我们的控制器继承它以后,那么它内部集成的大量的方法我们就可以使用了,这里我们不去探寻ApplicationController的基本原理和实现方法是什么,当然,你要搞懂也是非常简单,但作为初学者就没有必要了;
    在这里插入图片描述

前面我们说过,我们生成的welcome控制器,因为没有添加任何的action,所以处理不了任何的请求,jacky说控制器处理请求的不是控制器本身,而是action动作,并且在视图文件夹下也没有子视图去显示数据,所以现在welcome控制器生成了,但做不了任何事情,那下面我们就要创建控制器中的action;

  • 大家需要注意一下,rails的generate命令允许我们在创建控制器的时候,也顺便帮我们创建我们需要的action,那么只要在控制器的名称上面写上我们要创建的action的名称就可以了,这里我们添加两个action,一个是first,一个是second ;
rails destroy controller welcome
rails generate controller welcome first second

在这里插入图片描述

  • 我们在看一下控制器的文件,就自动生成了两个自定义的函数,那么控制器中的函数一般来说,就是控制器中的action,用于具体处理控制器接收到的不同的请求,并且在rails生成action的同时,它还自动生成了与action相对应的子视图
    @数据分析-jacky

3.2 设置views子文件

@数据分析-jacky

3.3 设置首页路由

  • 在config文件夹下的routes.rb配置 root路由
    @数据分析-jacky

  • 运行rails框架

rails server

@数据分析-jacky

原文地址:https://www.cnblogs.com/shujufenxi/p/12148383.html