【问题标题】:When to create a new controller in rails何时在 Rails 中创建新控制器
【发布时间】:2011-11-08 11:42:47
【问题描述】:

我想知道您何时知道需要在 Rails 应用程序中创建控制器。

例如,我正在学习使用 Rails 进行敏捷 Web 开发中的教程,该应用程序创建了多个模型,所有模型都具有单独的视图和控制器。但是,我们随后也创建了一个 Store 控制器,但没有与之关联的模型。为什么我们需要一个没有模型的控制器?模型的控制器不能处理所有必需的操作吗?

这很常见吗?如果是这样,你如何确定什么时候需要控制者?

谢谢!


这些答案有帮助,谢谢。

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1


    【解决方案1】:

    更新:我强烈建议阅读How DHH Organizes His Rails Controllers ,它比我原来的答案解释得更好。


    如果换一种说法,我认为这个问题会更合适:

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

    答案当然是,你不知道。当您考虑控制器时,最好不要考虑数据,而是稍微退后一步,考虑资源。如果你在互联网上搜索 REST,你会发现很多文章,其中大部分都包含对术语 resourcerepresentation 的各种解释。简而言之,让我们过分简单地说,resource 就是所有值得一提的东西。文章是(收藏)资源。商店是一个(单一的,成员)资源。

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

    回顾一下,这可能有助于您确定何时需要新控制器:

    • 当您考虑将非 RESTful 操作放入控制器(如 log_incalculate_date 等)时。
    • 当有一些东西可以命名并且“有趣”到足以成为单独的资源时。
    • 另外,当你以“由外而内”的方式开发时,这样的答案会更自然地出现:http://rubylearning.com/blog/2010/10/05/outside-in-development/

    总体而言,了解 REST 及其理念会有很大帮助。

    【讨论】:

    • 这是一个非常深刻和有用的答案。
    【解决方案2】:

    显然,没有一成不变的规则;但我认为考虑 MVC 的三个不同部分代表(或“做”)什么是有帮助的:

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

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

    例如,在 AWD 书中,Depot 应用程序(广泛地)通过操作和存储产品来工作 - 所以它有一个产品模型。

    有两种不同的交互方式;作为仓库的所有者(添加产品、调整价格和库存......)或作为客户(将产品添加到您的购物车、结帐......)。所以前者有一个 Admin 控制器,后者有一个 Store 控制器。

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

    【讨论】:

      【解决方案3】:

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

      为什么?如前所述:MVC 框架要求控制器是唯一可以与模型交互的元素(有点像夜总会 V.I.P. 区的保镖,里面挤满了辣妹!极客由“视图”代表 LOL! !)!!

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多