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