来自'使用Rails 4的敏捷Web开发'第277页。
如果有传入的请求 一个名为(比如)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假定控制器位于子目录中 目录应用程序/控制器位于以子目录命名的Ruby模块中。
我的问题是:两个book_controller.rb文件怎么会发生冲突? 我有两个不同的URL:.... / admin / book和.... / content / book,它们怎么会发生冲突?在前一段中明确指出
[..]任何前导路径信息将用于从app / controllers目录开始浏览子目录
答案 0 :(得分:0)
想象一下像这样的文件路径
../应用程序/控制器/管理/ book_controller.rb
&安培;&安培;
../应用程序/控制器/内容/ book_controller.rb
Rails使用约定优于配置:http://en.wikipedia.org/wiki/Convention_over_configuration
就像它在最后一段中所述
如果Rails没有采取进一步措施,这两个类就会发生冲突。处理 有了这个,Rails假设控制器在子目录中 目录app / controllers是以Ruby命名的 子目录。
如果我错了,有人请指正,但是rails会查找名为admin.rb和content.rb的模型
答案 1 :(得分:0)
文件名无关紧要。什么是常数名称。
两个名称相同的文件完全可以,例如controllers/admin/books_controller.rb
和controllers/books_controller.rb
。
但是,这些控制器内的类名应该不同。您可以添加命名空间来区分它们。例如
class Admin::BooksController
class BooksController