Вы ищете метод подчеркивания. Подробнее здесь .
"Articles::Comment".underscore
Или, если у вас есть сам класс контроллера, это будет выглядеть так:
Articles::Comment.name.underscore
EDIT
Что касается маршрутов, они строятся по одному за раз, даже когда вы их именуете. Когда вы делаете что-то вроде этого:
map.resources :articles do |articles|
articles.resources :comments
end
Рельсы собираются сначала:
"articles". classify # which yields "Article" then rails is going to append "Controller" to it
Затем он получит «комментарии» и сделает то же самое, но этот будет перенаправлен в «/ article». Rails не использует пространства имен для внутренних ресурсов, поэтому контроллер должен быть CommentsController, а не Articles :: CommentsController.
Только тогда вы четко определите пространство имен для чего-то, Rails соберет пространство имен для ваших классов:
map.namespace :admin do |admin|
admin.resources :articles # will require controller "Admin::ArticlesController"
end
Надеюсь, теперь стало понятнее.