Muszę znać bieżącą trasę w filtrze w Railsach. Jak mogę dowiedzieć się, co to jest?
Korzystam z zasobów REST i nie widzę nazwanych tras.
ruby-on-rails
ruby
routing
luca
źródło
źródło
Odpowiedzi:
Aby znaleźć identyfikator URI:
Aby znaleźć trasę, tj. Kontroler, akcję i parametry:
źródło
params[:controller]
iparams[:action]
. Jednak poza tym, jeśli chcesz rozpoznać trasę, ten interfejs API nie jest już dostępny. Teraz się zmieniłoActionDispatch::Routing
i jeszcze tego nie wypróbowałemrecognize_path
.request.path
do znalezienia bieżącej ścieżki.request.env['ORIGINAL_FULLPATH']
celu włączenia możliwych parametrów do ścieżki, zobacz moją odpowiedź poniżej.Jeśli próbujesz specjalną skrzynkę w widoku, możesz użyć
current_page?
jak w:... lub akcja i identyfikator ...
... lub nazwana trasa ...
...i
Ponieważ
current_page?
wymaga zarówno kontrolera, jak i akcji, kiedy zależy mi tylko na kontrolerze, tworzęcurrent_controller?
metodę w ApplicationController:I użyj tego w ten sposób:
... który działa również z wieloma nazwami kontrolerów ...
źródło
controller_name
iaction_name
są dobre do użycia w pomocnikach i widokach tego typu rzeczy.Najprostsze rozwiązanie, jakie mogę wymyślić w 2015 r. (Zweryfikowane przy użyciu Rails 4, ale powinno również działać przy użyciu Rails 3)
źródło
<form action="<%= request.path %>">
Możesz to zrobić
Działa dla mnie w szynach 3.1.0.rc4
źródło
W szynach 3 można uzyskać dostęp do obiektu Rack :: Mount :: RouteSet za pośrednictwem obiektu Rails.application.routes, a następnie wywołać rozpoznawanie bezpośrednio na nim
która otrzymuje pierwsze (najlepsze) dopasowanie, następująca pętla formularza blokuje pasujące trasy:
gdy już znajdziesz trasę, możesz uzyskać nazwę trasy poprzez route.name. Jeśli chcesz uzyskać nazwę trasy dla określonego adresu URL, a nie bieżącą ścieżkę żądania, musisz wyodrębnić fałszywy obiekt żądania, aby przekazać go do szafy, sprawdź ActionController :: Routing :: Routes.recognize_path, aby zobaczyć jak oni to robią.
źródło
undefined method 'recognize' for #<Journey::Routes:0x007f893dcfa648>
Na podstawie sugestii @AmNaN (więcej szczegółów):
Teraz możesz to nazwać np. W układzie nawigacyjnym, aby oznaczyć elementy listy jako aktywne:
Dla tras
users
i wystarczyłoby:alerts
current_page?
Ale przy zagnieżdżonych trasach i żądaniach dotyczących wszystkich działań kontrolera (porównywalnych z
items
)current_controller?
była dla mnie lepsza metoda:Pierwsza pozycja menu jest w ten sposób aktywna dla następujących tras:
źródło
Lub bardziej elegancko:
request.path_info
Źródło:
Prośba o dokumentację w szafie Rack
źródło
Zakładam, że masz na myśli identyfikator URI:
Zgodnie z komentarzem poniżej, jeśli potrzebujesz nazwy kontrolera, możesz po prostu to zrobić:
źródło
self.
wself.controller_name
iself.controller_class_name
Jeśli potrzebujesz również parametrów :
I pamiętaj, że zawsze możesz zadzwonić
<%= debug request.env %>
w widoku, aby zobaczyć wszystkie dostępne opcje.źródło
request.url
request.path # aby uzyskać ścieżkę oprócz podstawowego adresu URL
źródło
Możesz zobaczyć wszystkie trasy poprzez prowizję: trasy (może ci to pomóc).
źródło
Możesz zrobić,
request.env['REQUEST_URI']
aby zobaczyć pełny żądany identyfikator URI .. wyświetli on coś takiego jak poniżejźródło
Możesz to zrobić:
Teraz możesz użyć w ten sposób:
źródło