模型,视图和控制器是如何连接的?

我理解模型,视图和控制器在应用程序中扮演的不同角色,但它们是如何相互链接的,例如,简单的比较是在将JavaScript文件与HTML文件链接时,需要带有’src’引用的标记。

自从学习Rails以来,我被告知他们是联系在一起的,但不是如何。

模型,视图和控制器是如何实际链接的,为什么MVC特别是Rails不需要’src’或类似的东西?

基本上它都是通过路由控制器和动作链接的。

routes文件(your_app_root / config中的routes.rb文件)有效拦截传入的url并将该url映射到控制器/操作(实际上由Nginx等Web服务器完成,然后通过类似的方式将请求传递到rails应用程序独角兽,但完全是另一个问题)。

因此,对于标准HTML网站设置,您可能有一个名为home的文件夹,在该文件夹中您可能有一个index.html

因此,当您导航到some_url / home / index时,您将获得在浏览器中呈现的index.html文件的内容。

在RoR中,您需要一个定义集合的get请求的路由(传递多个或没有参数)

它可能看起来像这样

YourApp::Application.routes.draw do get 'home', to: 'home#index', as: :home # etc... 

如果您导航到some_url / home,该路由会将您的浏览器连接到家庭控制器上的索引操作

家庭控制器中的索引操作可以只是一个空操作

 class HomeController < ApplicationController def index end end 

并且在app / views / home文件夹中提供index.html.erb然后您将获得自动呈现的文件,因为ActionController将您告诉它的任何内容翻译为HTML,css和javascript或json或XML(如果您是使用资源路由,它收到的请求是XML或JSON请求,并将结果数据发送回浏览器

如果您想从数据库中显示一些数据,那么控制器操作负责获取该数据并将其填充到您的视图可以在erb标记中使用的对象(由@符号表示的实例变量)中

例如

 class HomeController < ApplicationController def index @some_records = SomeModel.all end end 

然后可以在index.html.erb文件中使用它

 
    <% @some_records.each do |rec| %>
  • A record: <%=rec.some_method%>
  • <% end %>

因为您有路由,所以您可以使用路由名称作为链接和按钮的路径,将数据从浏览器发布回服务器,整个过程重新开始。

这并不是对它们究竟是如何挂在一起的严格描述,而是它足够接近让你知道这一切是如何发生的

模型 – 视图 – 控制器是一种组织Rails应用程序的软件设计模式。 从软件架构师的角度来看,它是一种抽象,只是提供了一种组织代码的方法。 您可以在Rails API的类层次结构中看到MVC设计模式,特别是ActionController(控制器),ActionView(视图)和ActiveRecord(模型),这些对象可以被子类化以用作Web应用程序的组件。 您还可以在Rails应用程序的文件结构中看到MVC设计模式,您可以在其中找到模型,控制器和视图的文件夹。 除非深入研究Rails源代码,否则您将看不到将模型,控制器和视图连接在一起的实际代码。

有关将模型,控制器和视图连接在一起的Rack中间件的深入技术介绍,您可以阅读RailsGuide:Rails on Rack ,其中描述了Action Dispatcher。

Action Dispatcher执行集成模型,控制器和视图对象的工作。 当您遵循根据MVC设计模式组织代码的Rails约定时,Rails会为您“链接”代码完成所有工作。 你永远不会真正看到将MVC片段“链接”在一起的代码。

有关MVC(以及其他所有Rails)的更完整说明,请参阅我的深入文章:

什么是Ruby on Rails?

要了解Rails,您需要从多个角度来看待它,包括软件架构。