Получить имя контроллера из имени класса в соответствии с соглашениями RoR - PullRequest
1 голос
/ 26 июля 2011

Я использую Ruby on Rails 3.0.9, и я хотел бы создать имя контроллера из имени класса, насколько это возможно, в соответствии с соглашениями об именах RoR.Например, если у меня есть класс Articles::Comment, я бы хотел получить строку articles/comments.

Возможно, существует метод RoR, созданный разработчиками для внутренней обработки этих соглашений, но я этого не знаю.

Как я могу получить имя контроллера, как в примере выше

1 Ответ

3 голосов
/ 26 июля 2011

Вы ищете метод подчеркивания. Подробнее здесь .

"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

Надеюсь, теперь стало понятнее.

...