Eu preciso conhecer a rota atual em um filtro no Rails. Como posso descobrir o que é?
Estou usando recursos REST e não vejo rotas nomeadas.
ruby-on-rails
ruby
routing
luca
fonte
fonte
Respostas:
Para descobrir o URI:
Para descobrir a rota, ou seja, controlador, ação e parâmetros:
fonte
params[:controller]
eparams[:action]
. No entanto, fora dela, se você deseja reconhecer a rota, essa API não está mais disponível. Agora ele mudouActionDispatch::Routing
e eu ainda não testeirecognize_path
.request.path
para encontrar o caminho atual.request.env['ORIGINAL_FULLPATH']
para incluir os possíveis parâmetros no caminho, veja minha resposta abaixo.Se você estiver tentando processar algo especial em uma exibição, poderá usar
current_page?
como em:... ou uma ação e id ...
... ou uma rota nomeada ...
...e
Como
current_page?
requer um controlador e uma ação, quando me preocupo apenas com o controlador, faço umcurrent_controller?
método no ApplicationController:E use-o assim:
... que também funciona com vários nomes de controladores ...
fonte
controller_name
eaction_name
são bons para uso em ajudantes e visualizações para esse tipo de coisa também.Solução mais simples que eu posso encontrar em 2015 (verificada usando o Rails 4, mas também deve funcionar com o Rails 3)
fonte
<form action="<%= request.path %>">
Você consegue fazer isso
Funciona para mim no Rails 3.1.0.rc4
fonte
No trilhos 3, você pode acessar o objeto Rack :: Mount :: RouteSet através do objeto Rails.application.routes e, em seguida, chamar o reconhecimento diretamente
que obtém a primeira (melhor) correspondência, o seguinte formulário de bloco faz um loop nas rotas correspondentes:
depois de ter a rota, você pode obter o nome da rota via route.name. Se você precisar obter o nome da rota para uma URL específica, não o caminho da solicitação atual, precisará simular um objeto de solicitação falsa para passar ao rack, confira ActionController :: Routing :: Routes.recognize_path para ver como eles estão fazendo isso.
fonte
undefined method 'recognize' for #<Journey::Routes:0x007f893dcfa648>
Com base na sugestão @AmNaN (mais detalhes):
Agora você pode chamá-lo, por exemplo, em um layout de navegação para marcar itens da lista como ativos:
Para as rotas
users
ealerts
,current_page?
seria suficiente:Mas com rotas aninhadas e solicitação de todas as ações de um controlador (comparável a
items
),current_controller?
foi o melhor método para mim:A primeira entrada do menu é ativada para as seguintes rotas:
fonte
Ou, de maneira mais elegante:
request.path_info
Fonte:
Solicitar documentação do rack
fonte
Eu vou assumir que você quer dizer o URI:
Conforme seu comentário abaixo, se você precisar do nome do controlador, basta fazer o seguinte:
fonte
self.
inself.controller_name
eself.controller_class_name
Você também precisa dos parâmetros :
E lembre-se de que você sempre pode ligar
<%= debug request.env %>
para ver todas as opções disponíveis.fonte
request.url
request.path #para obter o caminho, exceto o URL base
fonte
Você pode ver todas as rotas via rake: routes (isso pode ajudá-lo).
fonte
Você pode fazer
request.env['REQUEST_URI']
para ver o URI completo solicitado. Ele exibirá algo como abaixofonte
Você consegue fazer isso:
Agora, você pode usar assim:
fonte