如果我必须拥有那些看起来像这样的控制器
namespace :somearea do
resources :users do
resources :posts do
resources :comments
end
end
端
然后我如何命名他们?可以将它们命名如下:
class SomeArea::BaseController < ApplicationController
end
class SomeArea::UsersController < SomeArea::BaseController
end
class SomeArea::Users::PostsController < SomeArea::BaseController
end
class SomeArea::Users::Posts::CommentsController < SomeArea::BaseController
end
这不是我项目中的确切层次结构,但是我希望能够理解我应该如何命名控制器。
答案 0 :(得分:2)
在这种情况下,嵌套路由仅适用于路由的设置方式。您不需要像在此处一样将控制器嵌套在模块中。事实上,我认为如果你这样做,你可能需要改变路由才能找到嵌套的控制器。我想说你想要以下内容:
class SomeArea::BaseController < ApplicationController
end
class SomeArea::UsersController < SomeArea::BaseController
end
class SomeArea::PostsController < SomeArea::BaseController
end
class SomeArea::CommentsController < SomeArea::BaseController
end
编辑 - 正如在zeantsoi的回答中所说的那样,深入嵌套这些路线被认为是不好的做法,或者至少应该尽可能避免。但是,如果由于某种原因你需要这样做,我仍然会说你不应该在代码中嵌套模块中的所有类。这会让事情变得更加麻烦。
答案 1 :(得分:0)
您列出的示例确实是语法上可接受的,但创建此类深层嵌套路由并不是一种好习惯。来自canonical Rails guide on routing:
深度嵌套的资源很快变得很麻烦...... 资源不应该嵌套超过1级。
该指南继续引用有关嵌套Rails路由的this article by Jamis Buck。如果你真的要像你描绘的那样嵌套你的路线,那么理解这样做的含义是值得的。
答案 2 :(得分:0)
您可以执行以下操作:
class SomeAreaController < ApplicationController
end
class UsersController < ApplicationControllerr
end
class PostsController < ApplicationController
end
class CommentsController < ApplicationController
end
因为您提出的方式仅暗示目录结构,并且它不会推断嵌套资源。例如SomeArea::Users::PostsController
表示您的posts_controller.rb
位于app/controllers/some_area/users/
文件夹中。
用户/帖子/评论从SomeArea::BaseController
继承的事实取决于您,但同样不能明确归因于您正在考虑嵌套资源这一事实。