何时在rails中创建新控制器

我想知道你何时知道你需要在rails应用程序中创建一个控制器。

例如,我正在阅读使用Rails的Agile Web Development中的教程,该应用程序创建了几个模型,所有模型都具有单独的视图和控制器。 但是,我们还创建了一个Store控制器,但没有与之关联的模型。 为什么我们需要一个没有型号的控制器? 模型的控制器难道无法处理所有必需的操作吗?

这是常见的吗? 如果是这样,你如何确定何时需要控制器?

谢谢!


这些答案有帮助,谢谢。

我担心的是,当我自己开发一些东西时,我会开始创建无用的控制器,或者在另一方面,不会创建必要的控制器。 但是,我想我需要停止将控制器和模型视为1-1关系,对吗? 如果我理解正确,可能有许多控制器访问模型,并且在一个控制器中使用了许多模型?

更新:我强烈推荐阅读DHH如何组织他的Rails控制器 ,这几乎比我原来的答案解释得更好。


我认为如果你用另一种方式说这个问题会更合适:

为什么我们需要每个控制器的模型(在这种情况下为AR)?

答案当然是,你没有。 当您考虑控制器时,最好不要考虑数据,而是稍稍退一步,并考虑资源 。 如果您在互联网上搜索REST,您会发现很多文章,其中大部分将包括术语资源表示的各种解释。 为了简化这个故事,让我们过分简化并说资源是值得一提的一切。 文章是(收集)资源。 商店是(单一的,成员)资源。

以签名用户为例。 您可能已经拥有UsersController(默认情况下)将允许您添加新用户(创建资源),删除它们(删除资源),显示单个用户以及所有用户。 如果您只考虑数据和控制器,您可能会开始在UserController中创建其他操作,如login_user ,这是一种气味。 如果您考虑资源,那就是“值得一提或为其创建URI的所有内容”,您可能会认为您需要其他资源,即: 会话 。 想一想:当用户登录时,他实际上创建了一个会话资源。 退出后,删除, 删除资源。 在我推荐的Rails教程书中有更好的解释: http : //ruby.railstutorial.org/chapters/sign-in-sign-out#sec : session

回顾一下,这可以帮助您确定何时需要新的控制器:

  • 当您考虑将非RESTful操作放在控制器中时,例如log_incalculate_date等。
  • 当有些东西你可以命名并且“有趣”足以成为一个单独的资源。
  • 此外,当您以“户外”风格进行开发时,这些答案会更自然地得到: http : //rubylearning.com/blog/2010/10/05/outside-in-development/

总的来说,学习REST及其理念将会有很大帮助。

显然,没有硬性规则; 但我认为从MVC的三个不同部分代表(或“做”)的角度来思考是有帮助的:

  • 模型代表数据和数据逻辑后端
  • 控制器允许用户与模型交互
  • 视图是用户通过Controller进行交互时看到的内容

因此,当您想要做不同的(类别)事物时,将使用不同的控制器。

例如,在AWD书中,Depot应用程序(广泛地)通过操作和存储产品来工作 – 因此它具有产品模型。

有两种不同的互动方式; 作为仓库的所有者(添加产品,调整价格和库存……)或作为客户(将产品添加到购物车,检查……)。 所以它有前者的Admin控制器和后者的Store控制器。

另一个原因,也就是经常与第一个原因相关的原因是,如果您的控制器需要不同的包装。 例如,您需要在执行任何管理员工作之前对用户进行身份validation,但您不需要基于客户的事情。 因此,您可以将操作分成两个控制器,并在Admin一个上放置一个before_filter来处理身份validation。

我也是RoR的新手,我正在做Michael Hartl的教程。 我在研究中发现并与更多经验丰富的Rubyist交谈,当你需要模型(数据库)的帮助时,你应该创建一个Controller。 例如,如果您正在创建会话,并且您正在创建的方法需要通过使用,存储,更新,添加(也称为RESTful行为)来与Model(数据库)进行交互,那么您将需要一个控制器。

为什么? 如前所述:MVC框架工作要求控制器是唯一可以与模型交互的元素(有点像一个充满热女人的夜总会VIP区的保镖!极客用“视图”LOL表示! )!

控制器可用于创建与模型没有边界的页面。 一个例子可能是法律通知或某事。 像那样。 静电的东西,……

Controller控制数据。 在大多数情况下,这些数据来自Model但这并不是最常见的组合。