0

如果我必须拥有控制器,它们看起来像这样

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

这不是我项目中的确切层次结构,但尽管如此,我希望能够理解在我的情况下我应该如何命名控制器。

4

3 回答 3

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 的回答中所说,将路线嵌套得很深被认为是不好的做法,或者至少是尽可能避免的事情。但是,如果出于某种原因需要您这样做,我仍然会说您不应该费心将所有类嵌套在代码中的模块中。这会让事情变得更加麻烦。

于 2013-06-12T12:15:43.670 回答
0

您列出的示例在语法上确实是可以接受的,但是创建这种深度嵌套的路由并不是一种好的做法。来自关于路由的规范 Rails 指南

深度嵌套的资源很快就会变得很麻烦......资源的嵌套深度不应超过 1 级。

该指南继续参考Jamis Buck关于嵌套 Rails 路线的这篇文章。如果您真的要按照您所描述的那样嵌套您的路线,那么值得一读以了解这样做的含义。

于 2013-06-12T12:15:09.807 回答
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它继承的事实取决于您,但同样不能明确归因于您正在考虑嵌套资源这一事实。

于 2013-06-12T12:18:26.960 回答