Rails强制采用了MVC架构即应用由控制器(Controller),模型(Model),视图(View)构成。 数据库
Model负责保持应用的状态。有时候只是为用户的一些交互操做而产生的临时状态。有时,状态是永久的,一般存于应用以外的数据库中。一个model不仅是数据,它能约束对数据的处理。例如model能强制总价低于$20的订单不享有折扣优惠。咱们能够将全部的商业规则实现与model中,以确保数据的有效性。modle身兼门卫与数据存储两职。缓存
View负责将从model处得到的数据生成用户界面。
架构
Controller负责统筹安排。Controller负责接收外部请求,与Model交互以及向用户展示一个相应的View。ide
这样的三位一体被称为MVC。(图源:摘自《Agile Web Development with Rails 4 》相关章节)
post
在一个Rails应用中,请求首先被路由响应,路由解析后控制器中的特定方法(action)会被调用。该action可能会在请求中寻找数据,也可能会与Model交互,也可能有其余的action被调用。最终,该action准备好了要交给view的信息。
spa
请求 由路径和方法构成(图例中的为post方法)。其余经常使用的方法有GET,PUT(貌似如今在都用PATCH了),PATCH,DELETE。根据图例,Rails将路径的第一部分line_items做为控制器名,product_id做为参数传入。根据约定post方法与create动做(action)相关联。综上所述,路由(router)知道须要调用控制器LineLtemsController中的create动做(action)。router
create动做处理了用户的请求。本例中,它发现了当前用户的购物车(由model管理的一个对象),同时要求model查找关于product2的信息。并让购物车将之添加进自身。
对象
如今购物车中有了新商品,咱们能够将它展现给用户。控制器调用了视图的相关代码。但在此以前,控制器仍作了一些其余一些处理以便视图访问购物车对象。在Rails中,想这样的一些调用都是隐式的。(约定大于配置)经过约定将特定的视图与给定的方法联系起来。
blog
Rails提供了 Active Record的ORM层来实现数据库的相关操做。 这就是TP里AR操做的源头嘛?
路由
Rails经过Action Pack 组件来支持控制器 和 视图。
控制器
控制器是Rails应用的逻辑中心,它协调用户,视图,模型之间的交互。可是大部分的 交互的Rails已经悄悄地都替你干完了。(人生苦短,我用Rails ?-。-)开发人员只需集 中精力于功能代码。
控制器还提供了大量的辅助功能
负责额外的内部动做的路由
管理缓存
管理helper模块
管理SESSION