在两个不同的目录相同的控制器名称(Same controller name in two diffe

2019-10-29 16:47发布

从pag.272 '使用Rails 4敏捷Web开发'。

如果传入的请求有一个名为(比如说)管理/控制书,Rails会查找名为book_controller目录中的应用程序/控制器/管理控制器。 也就是说,控制器名的最后部分将始终解析到一个名为name_controller.rb,任何领先的路径信息将被用来通过子目录来导航,在app / controllers目录开始。

试想一下,我们的节目有控制器的两个这样的群体(比如,管理员/ xxx和内容/ XXX),并且这两个组定义了一本书控制器。 有会是一个叫book_controller.rb在管理和应用程序/控制器的内容子目录两个文件。 这两个控制器的文件将定义一个名为BookController的类。 如果导轨没有采取进一步的措施,这两个类会发生冲突。 为了解决这个问题,Rails的假设,在应用程序目录的子目录中的控制器/控制器都在子目录的名字命名的Ruby模块。

我的问题是:怎么可能两个book_controller.rb文件冲突?
我有两个不同的URL:... /管理/书... /内容/书,他们怎么能发生冲突? 在前面的段落它明确表示,

[..]任何前导路径信息将被用于通过子目录来导航,在该应用/控制器目录开始

Answer 1:

该文件的名称并不重要。 什么事都是常量名。

这完全没关系有两个文件具有相同的名称,如controllers/admin/books_controller.rb ,和controllers/books_controller.rb

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

class Admin::BooksController

class BooksController


Answer 2:

想象一下,像这样的文件路径

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

&&

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

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

就像它在最后一段指出

如果导轨没有采取进一步的措施,这两个类会发生冲突。 为了解决这个问题,Rails的假设,在应用程序目录的子目录中的控制器/控制器都在子目录的名字命名的Ruby模块。

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



文章来源: Same controller name in two different directories