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

时间:2013-11-23 13:04:14

标签: ruby-on-rails controller

来自'使用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目录开始浏览子目录

2 个答案:

答案 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.rbcontrollers/books_controller.rb

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

class Admin::BooksController

class BooksController