3--Rails 的MVC设计模式

1.简单举例如下:

2.action

控制器要读取那个数据,显示到哪个视图上,需要用到action。一个控制器其实就是由很多的action组成,控制器真正的业务逻辑都写在每一个action中,每一个action负责控制器的一个子功能。每当往控制器发送一个请求的时候,控制器先判断这个请求应该由哪个action去处理,然后这个action再去调用对应的数据和视图。

3.一个程序有多个控制器,每个控制器就是一个大的功能模块;数据也就是模型也有多个,数量由数据种类决定,比如用户数据和存款数据就应该是两个不同的模型;视图就是显示界面,这个自然是多个。

如下图,储蓄账户和信用账户就分开成两个。

4.每个大功能模块又细分为多个子功能,如下图:

Rails的MVC例子说明:

想往程序添加功能,就是要添加控制器,利用命令可以快速生成相关文件:

File=>Open,然后选择程序maizi2,就可以在IDE中查看到视图了:

5. 下面命令行不能关闭,不然网页就不能显示了。

想往程序添加功能,就是要添加控制器,而要添加控制器,就再打开一个新的命令行窗口,进入程序目录,并执行命令:

我们添加一个welcome控制器,该控制器负责欢迎功能比如在页面上显示欢迎信息。

可以看到,自动生成相关的控制器文件、视图文件、帮助文件、测试文件、资源文件、javascript文件、样式文件。

如下MVC发现只生成控制器和视图,模型没有生成,这个我们先记住使用generate生成的时候不会自动添加模型就行。

ApplicationController看成是控制器的基类(里面封装大量的方法),而WelcomeController就是自动生成的控制器实例。

 

一开始控制器没有action,视图也是空文件夹没有视图文件

 

万一控制器生成错了比如命名错误或者就是想删除,总不能一个个删除自动生成的那么多配套文件吧,用命令rails destroy controller welcome

因为一开始控制器没有action,所以任何请求都处理不了。

我们删除了控制器,补充回去,还有我们在控制器名后面继续添加多个参数并用空格隔开就是生成该控制器下的多个action,如下生成welcome控制器并且该控制器包含first和second两个action

IDE中也自动出现变化,多出两个函数,并且视图文件夹里多出两个对应的子视图:

控制器中定义的函数一般就是控制器的action,如上两个action就是函数的形式。

我们修改对应的first子视图内容为下,而控制器中first函数内容为空,但是action即使不写代码也会自动关联同名的视图文件

也就是说请求发送到对应的action,不需要自己进行其他多余代码的编写就会自动显示同名视图。

这时候刷新页面还是默认页面,内容并没改变。为什么呢?因为控制器接受请求才发挥作用,我们并没有发送任何请求给控制器,那么怎样让welcome发挥功能呢?这里就需要我们简单配置一个rails的首页路由。

config文件夹下routes.rb就是用来保存路由配置信息的文件,

最后一行root 'welcome#index' 就是配置网站的首页路径,也就是访问网站首页的时候向网站的哪个控制器的哪个action发送请求,这里注释掉,所以访问网站默认首页就是rails的默认首页,我们去掉注释,首页结果如图。

因为没有名为index的action,所以去掉注释后还要改为

还是报错,解决办法:

 

也就是访问网站首页时,发送请求给welcome控制器, welcome控制器接收请求并调用first这个action函数;又因为rails框架自动将action函数和对应子视图联系起来,所以请求又发送给对应的子视图,将子视图的内容显示出来。到此,完成请求。

要是我们给控制器发送请求,但是控制器中没有与之对应的处理,那会怎么样?

我们来试一下,删除控制器中first这个action的代码看看:

first.html.erb这个子视图也删除掉,出现如下提示

再次加上first这个action的代码之后,但是first子视图还是删除状态

我们接着新建一个first.html.erb就不再报错了

posted @ 2016-02-14 17:16  SixEvilDragon  阅读(464)  评论(0编辑  收藏  举报