Способ узнать, какой rails-контроллер / модель обслуживает страницу?

#ruby-on-rails #ruby #ruby-on-rails-3

#ruby-on-rails #ruby #ruby-on-rails-3

Вопрос:

Это может быть немного странный вопрос, но мне было интересно, знает ли кто-нибудь ярлык Rails / системную переменную или что-то еще, что позволило бы мне отслеживать, какой контроллер обслуживает страницу и какая модель вызывается этим контроллером. Очевидно, что я создаю приложение, чтобы я знал, но я хотел создать более общий плагин, который мог бы получать эти данные задним числом, не просматривая их вручную.

Есть ли какой-нибудь простой ярлык для этого?

Ответ №1:

Контроллер и действие определены в params как params[:controller] и params[:action] , но для «модели» нет заполнителя, поскольку метод контроллера может создавать множество экземпляров моделей.

Возможно, вы захотите создать какой-нибудь вспомогательный метод для оказания помощи, если хотите:

 def request_controller
  params[:controller]
end

def request_action
  params[:action]
end

def request_model
  @request_model
end

def request_model=(value)
  @request_model = value
end
  

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

 @user = User.find(params[:id])

self.request_model = @user
  

Комментарии:

1. Но где бы вы это увидели? Я смотрю на представление и пытаюсь выяснить, какой контроллер он использует. Я не вижу в этом файле ничего, что указывало бы, какой контроллер он использует.

2. @Jimbo log/development.log всегда указывает, на какой контроллер был направлен запрос. Ищите строки, начинающиеся с Processing by . Эта информация предоставляется в контроллере как аспекты params .

Ответ №2:

Есть несколько способов, о которых я знаю:

Сначала вы можете сделать rake routes и проверить список маршрутов.

Во-вторых, вы могли бы поместить <%= "#{controller_name}/#{action_name}" %> в свой application.html.erb и посмотреть на представление, чтобы увидеть, что там написано. если вы разместите его в самом низу, вы всегда будете получать эту информацию внизу страницы.

Ответ №3:

Доступ к контроллеру можно получить через params хэш: params[:controller] . На самом деле нет способа получить модель, используемую контроллером, потому что нет необходимой корреляции между любым контроллером и любой моделью. Если у вас есть экземпляр модели, вы могли бы проверить object.class , чтобы получить имя класса модели.