我想知道你何时知道需要在rails应用程序中创建一个控制器.
例如,我正在阅读使用Rails的Agile Web Development中的教程,该应用程序创建了几个模型,所有模型都具有单独的视图和控制器.但是,我们还会创建一个Store控制器,但没有与之关联的模型.为什么我们需要一个没有型号的控制器?模型的控制器难道无法处理所有必需的操作吗?
这是常见的吗?如果是这样,你如何确定什么时候保证控制器?
谢谢!
这些答案有帮助,谢谢.
我担心的是,当我自己开发一些东西时,我会开始创建无用的控制器,或者在另一方面,不会创建必要的控制器.但是,我想我需要停止将控制器和模型视为1-1关系,对吗?如果我理解正确,可能有许多控制器访问模型,并且在一个控制器中使用了许多模型?
更新:我强烈推荐阅读DHH如何组织他的Rails控制器 ,这几乎比我原来的答案解释得更好.
我认为如果你换一种说法,这个问题会更合适:
为什么我们需要每个控制器的模型(在这种情况下为AR)?
答案当然是,你没有.当您考虑控制器时,最好不要考虑数据,而是稍稍退一步,并考虑资源.如果您在互联网上搜索REST,您会发现很多文章,其中大部分将包括术语资源和表示的各种解释.为了简化这个故事,让我们过分简单,并说资源是值得一提的一切.文章是(收集)资源.商店是(单一的,成员)资源.
以签名用户为例.您可能已经拥有UsersController(默认情况下)将允许您添加新用户(创建资源),删除它们(删除资源),显示单个用户以及所有用户.如果你只考虑数据和控制器,你可能会开始创建像login_user
UserController 这样的其他动作,这是一种气味.如果您考虑资源,那就是"值得一提或为其创建URI的所有内容",您可能会认为您需要另一种资源,那就是:会话.想一想:当用户登录时,他实际上创建了一个会话资源.退出后,删除,删除资源.在我推荐的Rails教程书中有更好的解释:http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec:session
总结一下,这可以帮助您确定何时需要新的控制器:
当您考虑将非RESTful操作放在控制器中log_in
时calculate_date
,等等.
当有些东西你可以命名并且"有趣"足以成为一个单独的资源.
此外,当你以"外在的"风格进行开发时,这样的答案会更自然地得到:http://rubylearning.com/blog/2010/10/05/outside-in-development/
总的来说,学习REST及其理念将会有很大帮助.
显然,没有硬性规则; 但我认为从MVC的三个不同部分代表(或"做")的角度来思考是有帮助的:
模型代表数据和数据逻辑后端
控制器允许用户与模型交互
视图是用户通过Controller进行交互时看到的内容
因此,当您想要做不同的(类别)事物时,将使用不同的控制器.
例如,在AWD书中,Depot应用程序(广泛地)通过操作和存储产品来工作 - 因此它具有产品模型.
有两种不同的互动方式; 作为仓库的所有者(添加产品,调整价格和库存......)或作为客户(将产品添加到购物车,结帐......).所以它有前者的Admin控制器和后者的Store控制器.
另一个原因,也就是经常与第一个原因相关的原因是,如果您的控制器需要不同的包装.例如,您需要在执行任何管理员工作之前对用户进行身份验证,但是您不需要基于客户的事情.因此,您可以将操作分成两个控制器,并before_filter
在管理员一个上处理身份验证.