Ruby on rails 按照RoR约定从类名中检索控制器名称

Ruby on rails 按照RoR约定从类名中检索控制器名称,ruby-on-rails,ruby,ruby-on-rails-3,controller,naming-conventions,Ruby On Rails,Ruby,Ruby On Rails 3,Controller,Naming Conventions,我使用的是RubyonRails3.0.9,我想从类名中构建一个控制器名,并尽可能遵循RoR命名约定。例如,如果我有Articles::Comment类,我想检索Articles/comments字符串 也许它存在一个由开发人员创建的RoR方法来在内部处理这些约定,但我不知道这一点 如何检索上面示例中的控制器名称?您正在查找下划线方法 或者,如果您有控制器类本身,它将如下所示: Articles::Comment.name.underscore map.resources :articles

我使用的是RubyonRails3.0.9,我想从类名中构建一个控制器名,并尽可能遵循RoR命名约定。例如,如果我有
Articles::Comment
类,我想检索
Articles/comments
字符串

也许它存在一个由开发人员创建的RoR方法来在内部处理这些约定,但我不知道这一点


如何检索上面示例中的控制器名称?

您正在查找下划线方法

或者,如果您有控制器类本身,它将如下所示:

Articles::Comment.name.underscore
map.resources :articles do |articles|
  articles.resources :comments
end
编辑

对于路由,它们一次只构建一个部分,即使在您为它们命名名称时也是如此。当你这样做的时候:

Articles::Comment.name.underscore
map.resources :articles do |articles|
  articles.resources :comments
end
rails首先要做的是:

"articles". classify # which yields "Article" then rails is going to append "Controller" to it
然后它将获得“评论”,并执行相同的操作,但这一条将在“/articles”下路由。Rails不为内部资源命名名称空间,因此控制器必须是CommentsController,而不是Articles::CommentsController

只有这样,您才能清楚地为某些内容命名名称空间,Rails才会为您的类命名名称空间:

map.namespace :admin do |admin|
  admin.resources :articles # will require controller "Admin::ArticlesController"
end

我希望现在更清楚。

使用您的代码,我还需要调用“pluralize”方法。。。然而,RoR是如何在内部处理这些命名约定的呢?看起来我把你的问题搞错了,我没有注意到复数形式,这是Rails为路径生成名称的方式,就像在文章_comment _path中一样,而不是为路由生成名称。在路线上,每一块都有自己的名称,这是Tableized的类名。