Мне нужно знать текущий маршрут в фильтре в Rails. Как я могу узнать что это?
Я делаю REST-ресурсы и не вижу именованных маршрутов.
ruby-on-rails
ruby
routing
Luca
источник
источник
Ответы:
Чтобы узнать URI:
Чтобы узнать маршрут, т.е. контроллер, действие и параметры:
источник
params[:controller]
иparams[:action]
. Однако за пределами этого, если вы хотите распознать маршрут, этот API больше не доступен. Теперь он перешел на,ActionDispatch::Routing
и я еще не опробовалrecognize_path
его.request.path
для поиска текущего пути.request.env['ORIGINAL_FULLPATH']
чтобы включить возможные параметры в путь, см. Мой ответ ниже.Если вы пытаетесь создать особый случай в представлении, вы можете использовать
current_page?
как в:... или действие и идентификатор ...
... или именованный маршрут ...
...и
Поскольку
current_page?
требует и контроллера, и действия, когда я забочусь только о контроллере, я делаюcurrent_controller?
метод в ApplicationController:И используйте это так:
... который также работает с несколькими именами контроллеров ...
источник
controller_name
иaction_name
хороши для использования в помощниках и представлениях для такого рода вещей тоже.Самое простое решение, которое я могу предложить в 2015 году (проверено с использованием Rails 4, но также должно работать с использованием Rails 3)
источник
<form action="<%= request.path %>">
Ты можешь сделать это
У меня работает в рельсах 3.1.0.rc4
источник
В rails 3 вы можете получить доступ к объекту Rack :: Mount :: RouteSet через объект Rails.application.routes, а затем напрямую вызвать функцию распознавания
который получает первое (лучшее) совпадение, следующая блочная форма проходит по соответствующим маршрутам:
Как только у вас есть маршрут, вы можете получить имя маршрута через route.name. Если вам нужно получить имя маршрута для определенного URL-адреса, а не текущий путь запроса, то вам нужно будет смоделировать поддельный объект запроса для передачи в стойку, посмотрите ActionController :: Routing :: Routes.recognize_path, чтобы увидеть как они это делают
источник
undefined method 'recognize' for #<Journey::Routes:0x007f893dcfa648>
На основании предложения @AmNaN (более подробно):
Теперь вы можете вызвать его, например, в макете навигации, чтобы пометить элементы списка как активные:
Для
users
иalerts
маршрутов,current_page?
будет достаточно:Но с вложенными маршрутами и запросом всех действий контроллера (сравнимых с
items
),current_controller?
для меня это был лучший метод:Первый пункт меню активен для следующих маршрутов:
источник
Или, более элегантно:
request.path_info
Источник:
Запрос документации стойки
источник
Я предполагаю, что вы имеете в виду URI:
Согласно вашему комментарию ниже, если вам нужно имя контроллера, вы можете просто сделать это:
источник
self.
вself.controller_name
иself.controller_class_name
Если вам также нужны параметры :
И помните, вы всегда можете позвонить
<%= debug request.env %>
в представлении, чтобы увидеть все доступные варианты.источник
request.url
request.path # для получения пути, кроме базового URL
источник
Вы можете просмотреть все маршруты через rake: маршруты (это может вам помочь).
источник
Вы можете сделать,
request.env['REQUEST_URI']
чтобы увидеть полный запрошенный URI .. он выведет что-то вроде нижеисточник
Ты можешь сделать это:
Теперь вы можете использовать так:
источник