Back link [ rails ]

Mam coś takiego:

<%= link_to 'Back', :back %>

Czy istnieje jakiś sprytny sposób, by ograniczyć cofanie w obrębie witryny? tzn: wchodzę na stronę z google.pl, klikam “cofnij” i cofa mnie do google.pl, a chciałbym, żeby został na mojej stronie. Czytałem o nadpisaniu metody url_for ale jak to powinno wyglądać?

Implementacja url_for wygląda mniej więcej tak: https://github.com/rails/rails/blob/master/actionpack/lib/action_view/helpers/url_helper.rb#L31-L41, tzn. dla :back, zwracany jest po prostu rezultat tej metody: https://github.com/rails/rails/blob/master/actionpack/lib/action_view/helpers/url_helper.rb#L43-L46

W rezultacie albo dostajesz HTTP_REFERER, o ile jest dostępny, lub po prostu “wstecz” w przeglądarce (dlatego osobiście nie przepadam za :back, ale to już inna sprawa).

Żeby to nadpisać, najłatwiej będzie Ci to zrobić w helperze, np. w ApplicationHelper:

module ApplicationHelper def url_for(options = nil) if options == :back # ... tutaj możesz sprawdzić czy HTTP_REFERRER to Twoja domena czy nie # i w zależności od tego zwrócić to co Ci pasuje else super end end end
Helpery są includowane na końcu, więc jak w takiej konfiguracji wywołasz url_for, to najpierw zostanie wykonana Twoja implementacja, a jeżeli podana była inna opcja niż :back, ta oryginalna (dzięki “super”)

Dziękuje :slight_smile: