J'ai besoin de connaître l'itinéraire actuel dans un filtre dans Rails. Comment puis-je savoir ce que c'est?
Je fais des ressources REST et je ne vois aucune route nommée.
J'ai besoin de connaître l'itinéraire actuel dans un filtre dans Rails. Comment puis-je savoir ce que c'est?
Je fais des ressources REST et je ne vois aucune route nommée.
Réponses:
Pour connaître l'URI:
Pour connaître l'itinéraire, c'est-à-dire le contrôleur, l'action et les paramètres:
la source
params[:controller]
etparams[:action]
. Cependant, en dehors de celui-ci, si vous souhaitez reconnaître l'itinéraire, cette API n'est plus disponible. Il est maintenant passé àActionDispatch::Routing
et je ne l'ai pas encore essayérecognize_path
.request.path
pour trouver le chemin actuel.request.env['ORIGINAL_FULLPATH']
pour inclure les paramètres possibles dans le chemin d'accès, voir ma réponse ci-dessous.Si vous essayez de cas spécial quelque chose dans une vue, vous pouvez utiliser
current_page?
comme dans:... ou une action et id ...
... ou un itinéraire nommé ...
...et
Parce que
current_page?
nécessite à la fois un contrôleur et une action, lorsque je me soucie uniquement du contrôleur, je crée unecurrent_controller?
méthode dans ApplicationController:Et utilisez-le comme ceci:
... qui fonctionne également avec plusieurs noms de contrôleurs ...
la source
controller_name
etaction_name
sont bons pour une utilisation dans les aides et les vues pour ce genre de chose aussi.Solution la plus simple que j'ai pu trouver en 2015 (vérifiée avec Rails 4, mais devrait également fonctionner avec Rails 3)
la source
<form action="<%= request.path %>">
Tu peux le faire
Cela fonctionne pour moi dans les rails 3.1.0.rc4
la source
Dans les rails 3, vous pouvez accéder à l'objet Rack :: Mount :: RouteSet via l'objet Rails.application.routes, puis appeler reconnaître directement dessus
qui obtient la première (meilleure) correspondance, la forme de bloc suivante fait une boucle sur les routes correspondantes:
une fois que vous avez l'itinéraire, vous pouvez obtenir le nom de l'itinéraire via route.name. Si vous devez obtenir le nom de la route pour une URL particulière, pas le chemin de demande actuel, vous devrez alors simuler un faux objet de demande à transmettre au rack, consultez ActionController :: Routing :: Routes.recognize_path pour voir comment ils le font.
la source
undefined method 'recognize' for #<Journey::Routes:0x007f893dcfa648>
Basé sur la suggestion @AmNaN (plus de détails):
Vous pouvez maintenant l'appeler, par exemple dans une disposition de navigation pour marquer les éléments de la liste comme actifs:
Pour les routes
users
etalerts
,current_page?
cela suffirait:Mais avec des routes imbriquées et une demande pour toutes les actions d'un contrôleur (comparable à
items
),current_controller?
c'était la meilleure méthode pour moi:La première entrée de menu est ainsi activée pour les itinéraires suivants:
la source
Ou, plus élégamment:
request.path_info
Source:
demande de documentation en rack
la source
Je suppose que vous voulez dire l'URI:
Selon votre commentaire ci-dessous, si vous avez besoin du nom du contrôleur, vous pouvez simplement le faire:
la source
self.
dansself.controller_name
etself.controller_class_name
Si vous avez également besoin des paramètres :
Et n'oubliez pas que vous pouvez toujours appeler
<%= debug request.env %>
dans une vue pour voir toutes les options disponibles.la source
request.url
request.path #pour obtenir le chemin sauf l'URL de base
la source
Vous pouvez voir toutes les routes via rake: routes (cela pourrait vous aider).
la source
Vous pouvez faire
request.env['REQUEST_URI']
pour voir l'URI complet demandé .. il produira quelque chose comme ci-dessousla source
Tu peux le faire:
Maintenant, vous pouvez utiliser comme ceci:
la source