【发布时间】:2015-02-26 02:41:46
【问题描述】:
根据我目前的理解,如果我必须描述 Rails 应用程序的各个组件如何协同工作以响应请求,我会说以下内容:
1) 路由决定哪些请求 URL 映射到哪些控制器方法。
2) 控制器方法从模型中获取信息并将该信息(以全局变量的形式)传递给相应的视图模板。
3) 视图模板使用存储在全局变量中的数据来构造最终响应。
在上面的解释中,几个组件之间的关系是清楚的,不可否认的;即:
1) 路由和控制器方法
2) 控制器方法和视图模板
其实上面的关系是一对一的。
但是,模型类与其相邻组件类型(即控制器)的关系并不那么清楚。是的,控制器从模型中检索信息,但请考虑以下几点:
1) 控制器不必像静态网站那样从模型中检索信息。
2) 控制器可以从多个模型类中检索信息。
因此,是否可以准确地说模型与其他组件的存在稍微分开一些?准确地说,模型类构成了应用程序后端的后端,而其他组件(即路由、控制器方法和视图模板)构成了紧密耦合的、控制器根据需要进入模型类的线性机制?更具体地说,是否可以准确地说,至少在 rails 组件如何实际组合在一起的情况下,任何给定的控制器和任何给定的模型(例如 UserController 和 User)之间都没有自然关系?
是的,我知道 rails 带有“resources”关键字,用于在路由文件中生成 RESTful 路由,并且通常在 rails 中以 RESTful 方式完成工作。您可以说 Rails 适合于 RESTful Web 应用程序的开发。并且在 RESTful 应用程序的上下文中,模型和控制器之间是隐式相关的。但这是对 REST 架构风格的描述。我问的是铁轨。在我看来,在 Rails 本身中,模型仅与控制器相关,因为模型用于实现控制器的方法 - 因为软件中的代码组织是任意的,所以这些关系是任意的。
我正在考虑这些事情,因为我想为用户添加一种查看自己个人资料的方式。我已经有一个用户模型和一个控制器以及用于显示用户信息的视图。个人资料页面将显示来自用户模型的信息,但我不想为用户自己的个人资料使用相同的控制器或视图,就像我在显示有关其他用户的信息时所做的那样。因此,我计划为配置文件创建一个新的控制器和视图,但使用 User 模型来检索显示的信息。这是一个任意决定,就像构建应用程序时做出的其他任意决定一样。但是,如果由于某种原因模型和控制器应该在 rails 中保持紧密耦合(例如 1 对 1),这将不是一个有效的决定。
谁能证实或反驳我所说的?
【问题讨论】:
-
一个模型代表一个数据库表,控制器在模型和视图之间进行编排。这种关系是一对一的,没有具体的原因或限制。事实上,它可能只存在于最简单的应用程序中,尽管它通常是开发时一个合理的起点,这就是 Rails 会以这种方式构建新应用程序的原因。
标签: ruby ruby-on-rails-3 model-view-controller