#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
, чтобы получить имя класса модели.