ruby on rails 中的控制器和动作有啥区别?

Posted

技术标签:

【中文标题】ruby on rails 中的控制器和动作有啥区别?【英文标题】:What's the difference between controllers and actions in ruby on rails?ruby on rails 中的控制器和动作有什么区别? 【发布时间】:2014-01-04 11:01:26 【问题描述】:

谁能告诉我 ruby​​ on rails 中控制器和动作的区别?

我从官方 Rails 指南中获取了这个定义:

控制器的目的是接收应用程序的特定请求。路由决定 哪个控制器接收哪个请求。通常,每个路线都有不止一条路线 控制器,并且不同的路由可以由不同的动作提供服务。每个动作的目的是 收集信息以提供给视图。

我很困惑。 由于我是新手,请尽可能简单!

谢谢!

【问题讨论】:

这里是指南的链接:guides.rubyonrails.org/getting_started.html 从这个链接***.com/questions/6216722/…获得帮助 这让哈斯哈尔很困惑。代码太多!我正在寻找一些“抽象”的解释。顺便谢谢! 是的,我遇到了 4.2“Hello Rails”下的那两个段落,并一遍又一遍地阅读它们。它们非常混乱和不清楚,但我知道它们拥有最重要的全局信息。这个线程是无价的。 【参考方案1】:

控制器只是 Ruby Class 文件,其中包含一系列 instance methods


基本解释

Rails 控制器基本上是保存动作(方法)的文件

每次访问 Rails 应用程序时,都会向系统发送请求。 Rails 内部的各种技术route 请求某个action,您的代码可以使用传递的数据执行某种action(因此得名)。动作保存在controllers 中以提供应用程序结构

所以如果你访问http://yourapp.com/users/new,它会告诉Rails 在users 控制器中加载new 方法。您可以在控制器中拥有任意数量的操作,但您必须告诉 Rails routes 系统它们在那里,否则它们将无法访问


正确解释

Rails Controllers 只是 Ruby 类,存储一系列动作

“动作”(实例方法)处理传递的数据 (params) 以创建可以传递给模型或在其他方法中使用的 objects

每当您向 Rails 发送请求(访问 URL)时,它首先使用 ActionDispatch 中间件将您的请求发送到正确的 Class (controller) 实例方法 (action),然后您的代码执行有这些数据的东西

作为开发人员,您的工作是将正确的控制器与正确的模型连接起来,在正确的时间向用户展示正确的数据

【讨论】:

没问题 - 这是一个令人难以置信的学习系统,但是你发现的越多,你就能看到更多的成长!您开发 RoR 多长时间了? 因为你的问题是通用的——所以确实是针对特定的编程问题(代码越多越好)。我会再次投票给你 它告诉 Rails 在users 控制器中加载new 函数——不是一个函数。它是一个方法。 :) :) 是 Rubyish.. 非常感谢!我对 RoR 很陌生!和一般的编程。我非常感谢 Rich! 对于像我这样需要了解这一切如何运作的新手来说,这是一个很棒的大图解释。一个+谢谢你【参考方案2】:

免责声明:我不在 Rails 中编写代码(从来没有)。我编写Sinatra模块化应用程序并使用MVC模型。

您首先需要澄清MVC 模型。 MVC 是一种编程 Web 应用程序(在 RoR 中)或一般用户界面的方法。所以 MVC 代表 Model-View-Controller。我会试着解释一下,但为了理解这一点,你需要练习和玩弄它。

模型:如果您删除抽象层,它就是您的数据库方案。您的应用程序互连以检索信息的方式。

视图:这些信息被详细检索和提供的方式。本质上就是您或客户在浏览器中看到的内容。

控制器:控制器与程序交互以生成请求的视图或更改模型。当您访问带有统计信息的图表时,您请求查看,当您在其上输入 DATA 时更改模型。在 Rails 生态系统中,ActionController 是一个具有一组预定义方法的,可帮助您更轻松、更快速地执行标准 Controller 操作,例如更新表单等。

因此,动作控制器允许您将数据更改为模型(数据库),或请求路由查看您的数据,等等

Action 没有与 controllers 分离,它基本上是 controllers 所做的 :-)。其他一切都是静态的

如果您觉得这些概念仍然难以掌握,请尝试在 Sinatra 中构建一个非常基本的模块化应用程序,您将对事物的工作原理有一个基本的了解。

【讨论】:

感谢 atmosx。太好了!【参考方案3】:

类比解释(简单的解释,不要太技术化)

我在一个繁忙的办公室工作。我向我的员工发出命令(即“请求”),让他们做事。

例如

有时我想要一份文件以便阅读。

“Ngozi,请把 ABC.ASX EOFY 结果传给我?”

是的,先生!

有时我会要求我的员工编辑现有文档:

“Sunita,你能编辑关于工会地址状态的报告吗?”

“当然!”是响应。

我根据员工的工作类型组织员工

但我有一个小问题.....我有 10,000 多个不同类型的文档。有时我想获得:(I) 体育成绩和其他时候我想要:(ii) 晚间新闻,而在其他时候我想要:(iii) Donald Trump 最新凌晨 4 点推文的集合。

所以我创建了一个新系统。我有一个工作人员直接负责每种类型的事情。

Ngozi 负责处理 ASX(澳大利亚证券交易所)的财务业绩。当我想让 Ngozi 做某事(即执行某种类型的动作)时,我会告诉他该怎么做。

Sunita 主要从事政治工作。有时我会请她做某事(例如写一份报告——这是一种“行动”,或者我会让她给我带来一份文件——另一种行动——她会去做。我喜欢让 Sunita 从事政治工作,让 Ngozi 从事财务业绩工作。最好将他们的职责分开。)。

弗雷迪从事与皇后有关的任何事情。

等等。等等

比喻的意思?

在这种情况下,控制者是负责处理某些类型请求的人。而“行动”将是我想要做的特定的具体事情:

例如

获取文档或 编辑或什至 创建一个新文档。

希望能解决问题。

【讨论】:

以上是关于ruby on rails 中的控制器和动作有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails-使用原始参数重新呈现失败的控制器动作上的表单

如何在 ruby​​ on rails 中获取控制器和操作列表?

Ruby on Rails 3 表单中的 _snowman 参数有啥用?

Ruby on Rails 路由到控制器

Ruby on Rails 和 Grails 有啥区别?

ruby on rails错误undefined method `title' for nil:NilClass