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

2024-01-03

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

自从学习 Rails 以来,我一直被告知它们是相互关联的,但不知道如何关联。

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


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

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

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

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

在 RoR 中,要实现此功能,您将需要一个定义集合获取请求的路由(传入多个参数或不传入参数)

它可能看起来像这样

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 标记中使用的对象(由 @ 符号表示的实例变量)中

e.g.

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

然后可以在 index.html.erb 文件中使用它,如下所示

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

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

这并不是对这一切如何结合在一起的严格描述,但它足以让您了解这一切是如何发生的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模型、视图和控制器是如何连接的? 的相关文章

  • 如何使用 rspec 测试 mandrill api

    因此 我的客户报告说 许多电子邮件都发给了错误的人 我想编写一些功能测试来查找并确保他们收到电子邮件以及我的规格中的内容 我有 mandrill mailer 它使用 mandrill api 在它发送之前我想看看消息是什么 例如 创建新用
  • Rails 序列化数据验证

    我有一个通过默认 AR 行为序列化为 YAML 的字段 例如 它目前位于哈希数组中 name gt hi url gt bye name gt hi url gt bye name gt hi url gt bye 有没有办法可以在其中一些
  • 如何在 Haml 中编写 if 条件?

    怎么写if and if elseRuby on Rails 应用程序的 Haml 语句 HAML 是基于缩进的 解析器可能很棘手 在 Haml 中不需要使用 end 请改用缩进 在 Haml 中 只要在 Ruby 计算命令之后增加缩进 就
  • 水豚找不到元标签

    Capybara 2 1 0 似乎没有找到任何元标记 rdb 1 p page find meta Capybara ElementNotFound Exception Unable to find css meta 即使他们出现在page
  • Rails 验证日期范围的唯一性

    我有一个涉及员工缺勤记录的应用程序 我需要确保每条记录的开始日期和结束日期不重叠 例如 如果我输入了从今天开始到明天结束的缺勤记录 则不可能以任何方式在该日期范围内输入另一个缺勤记录 所以我不能制作一个从前天开始 然后在后天或任何更晚的日期
  • 如何检查rails上传的文件类型?

    我如何查看即将到来的文件类型 例如 csv 或 xls 请给个代码 我得到文件是这样的 aut name uploaded io original filename File open Rails root join public uplo
  • 回形针如何更改基本名称(文件名)?

    我正在尝试更改照片的基本名称 文件名 在我的模型中我有 attr accessor image url basename has attached file image styles gt original gt 300x250 gt pn
  • 如何使用 Rails 应用程序中的 s3 在存储桶之间复制文件?

    我目前正在开发一个 Rails 应用程序 尝试将视频从 s3 中的一个存储桶复制 移动到另一个存储桶 但是我在 Rails 应用程序上不断收到代理错误 502 在杂种日志中 它显示 无法分配内存 一旦发生此错误 应用程序就会终止 我们必须重
  • 如何跳过 Devise SessionsController 的 before_filter ?

    我有一个before filter in my ApplicationController 也就是说 对于我的项目中的每个控制器 我怎么能够skip before filter对于设计的SessionsController创造行动 这是我的
  • Rails 中的并行方法

    我的 Rails Web 应用程序有数十种方法 从调用 API 到处理查询结果 这些方法具有以下结构 def method one batch query API process data end def method nth batch
  • 如何在rails中使用npm包?

    我正在尝试使用王牌编辑 https github com ajaxorg ace在我的 Ruby on Rails 应用程序中 大部分视图由 React 组件组成 我正在使用反应轨道宝石 https github com reactjs r
  • 用于 RESTful 轨道应用程序的简单面包屑

    是否有任何辅助方法 除了默认 Rails 面包屑导航 http wiki rubyonrails org rails pages Breadcrumbs 为特定页面动态生成面包屑导航 而无需在 RESTful 应用程序中传递琐碎的参数 也就
  • 通过使用 Minitest 的 Rails,如何设置 RuboCop 在每次使用 rake 运行测试时自动运行?

    当我运行以下命令时 我想要RuboCop https github com bbatsov rubocop在测试运行之前检查我指定的应用程序目录 bundle exec rake test 我添加了以下任务lib tasks test ra
  • 错误“未初始化常量 AWS (NameError)”

    它说 AWS 未初始化 我正在使用 aws sdk core gem 我尝试使用 aws sdk gem 代替 问题仍然存在 这是initializers aws rb 文件 AWS config access key id gt ENV
  • Memcachier 达到缓存限制时 Heroku 请求超时

    我使用 Memcachier Dalli 作为客户端 将 Rails 应用程序部署到 Heroku 我正在使用免费插件 提供 25 MB 缓存 我们开始收到来自heroku的请求超时 经过调试 我们发现手动刷新Memcachier解决了问题
  • 使用 Minitest 测试自定义验证器

    我有多个带有电子邮件验证的模型 因此 我将验证提取到自定义验证器中 我按照以下教程做到了这一点导轨指南 http guides rubyonrails org active record validations html custom va
  • Rails 3 - “无法解析 Yaml”

    我不知道我做错了什么 我尝试运行 rails c 但它只是给了我一个错误 10 分钟前它还在工作 C Ruby192 lib ruby 1 9 1 psych rb 148 in parse couldn t parse YAML at l
  • 回形针不支持 .doc 文件

    在 Rails 4 0 2 中 我使用回形针 gem 上传文件 但它不支持 doc 文件 在文件上传字段下方 显示一条错误消息 扩展名与其内容不匹配 在模型中 检查内容类型的验证如下 validates attachment content
  • 自定义通用 Rails 错误消息

    我们的 Rails 应用程序被设计为链接到多个客户端数据库的单个代码库 根据子域 应用程序确定要连接到哪个数据库 我们使用液体模板为每个客户定制演示文稿 我们无法为每个客户定制通用的 我们很抱歉 出了点问题 消息 谁能推荐一种方法让我们能够
  • 如何在服务调用后检查 rspec 中的数组更改?

    目标很简单 例如我们有一个数组 name ghost state rejected name donkey state rejected 运行服务调用后UpdateAllUsers 这会将所有用户更改为 accepted name ghos

随机推荐