繁体   English   中英

两个不同目录中的控制器名称相同

[英]Same controller name in two different directories

摘自“使用Rails 4进行敏捷Web开发”第272页。

如果传入请求有一个名为(例如)admin / book的控制器,Rails将在app / controllers / admin目录中查找名为book_controller的控制器。 也就是说,控制器名称的最后一部分将始终解析为一个名为name_controller.rb的文件,并且任何前导路径信息都将用于浏览从app / controllers目录开始的子目录。

假设我们的程序有两组这样的控制器(例如admin / xxx和content / xxx),并且两组都定义了一个书本控制器。 应用程序/控制器的admin和content子目录中都有一个名为book_controller.rb的文件。 这两个控制器文件都将定义一个名为BookController的类。 如果Rails不采取进一步措施,这两个类将发生冲突。 为了解决这个问题,Rails假定目录app / controllers的子目录中的控制器位于以该子目录命名的Ruby模块中。

我的问题是:两个book_controller.rb文件如何冲突?
我有两个不同的URL:.... / admin / book和.... / content / book,它们如何冲突? 在上一段中,它明确表示

[..]从app / controllers目录开始,所有引导路径信息都将用于浏览子目录

想象这样的文件路径

../app/controllers/admin/book_controller.rb

&&

../app/controllers/content/book_controller.rb

Rails在配置上使用约定: http : //en.wikipedia.org/wiki/Convention_over_configuration

就像上段所述

如果Rails不采取进一步措施,这两个类将发生冲突。 为了解决这个问题,Rails假定目录app / controllers的子目录中的控制器位于以该子目录命名的Ruby模块中。

如果我错了,请有人纠正我,但Rails会寻找名为admin.rb和content.rb的模型

文件名无关紧要。 重要的是常量名称。

完全可以拥有两个名称相同的文件,例如controllers/admin/books_controller.rbcontrollers/books_controller.rb

但是,这些控制器内部的类名称应该不同。 您可以添加名称空间来区分它们。 例如

class Admin::BooksController

class BooksController

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM