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

Я использую Ruby on Rails 3.0.7, и я хотел бы получить имя контроллера по имени класса. То есть у меня

Articles::Category

и я хотел бы получить

articles/categories

Я хотел бы получить имя контроллера из файла представления, не связанного с Articles::Categories контроллером.

Как я могу это сделать (возможно, используя какой-то основной метод Ruby on Rails)?

Ответы [ 5 ]

10 голосов
/ 13 сентября 2012
Articles::Category.name.underscore.pluralize
=> "articles/categories"

Как уже упоминалось многими, для этого не существует специального метода.Но до тех пор, пока вы будете следовать соглашениям Rails, этот подход унесет вас далеко.

4 голосов
/ 10 июля 2011

Чтобы получить имя контроллера, скажем, внутри вашего представления, вы можете сделать:

<%= controller.controller_name %>

Чтобы получить имя класса, скажем User, если у вас есть объект пользователя с именем user:

user.class.to_s 

Кроме этого, я не думаю, что существует связь между контроллером и моделью, которая может дать вам имя контроллера из имени класса, потому что это разные вещи.Вы можете создать хеш вроде {: controller => 'class_name'} и отобразить их самостоятельно.

1 голос
/ 11 июля 2011
Articles::Categories.name.underscore #=> articles/categories

И это подчеркивает верблюжьи слова так, чтобы:

RailsAdmin::ApplicationHelper.name.underscore #=> rails_admin/application_helper
0 голосов
/ 22 октября 2014

Вместо underscore.pluralize просто используйте tableize:

ActiveRecord::Base.name.tableize
=> "active_record/bases"
0 голосов
/ 11 июля 2011

Если вы действительно имели в виду Articles::CategoriesController, тогда Articles::CategoriesController.controller_path даст вам то, что вы хотите.

Обновление Вопрос, учитывая имя модели Rails, как вы получаете имя связанного контроллера?

Ответ на этот вопрос: ты не можешь. Не существует однозначного сопоставления имени модели с именем контроллера. Модель User может управляться users_controller.rb и / или admin/users_controller.rb или вообще не иметь соответствующего контроллера. Вы, конечно, можете догадаться о некоторых вероятных возможностях, основанных на соглашениях Rails, но вы не можете знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...