Быстрый просмотр источника link_to_unless_current
...
... он использует current_path?
так, что вы сможете сделать что-то вроде этого:
В помощнике ...
def current_page_in?(*pages)
pages.select {|page| current_page?(page)}.compact.any?
end
... и тогда, на ваш взгляд, вы можете просто предоставить массив named_routes или хэшей, как ответ Шэдвелла выше.
<%= link_to_unless(current_page_in?(new_thing_path, things_path), "add a thing") %>
Вы поняли ...
ОБНОВЛЕНО
Подумал об этом ... и было бы здорово, если бы вы могли использовать его так, как надеялись, что оригинальный метод сработает. Здесь мы сравниваем предоставленный именованный маршрут (или контроллер + хэш действия) с текущей страницей И ее реферером.
def current_page_or_referrer_in(options)
url_string = CGI.unescapeHTML(url_for(options))
request = @controller.request
# We ignore any extra parameters in the request_uri if the
# submitted url doesn't have any either. This lets the function
# work with things like ?order=asc
if url_string.index("?")
request_uri = request.request_uri
referrer_uri = request.referrer
else
request_uri = request.request_uri.split('?').first
referrer_uri = request.referrer.split('?').first
end
#referrer_uri always has full path (protocol, host, port) so we need to be sure to compare apples w apples
if url_string =~ /^\w+:\/\//
["#{request.protocol}#{request.host_with_port}#{request_uri}", referrer_uri].include?(url_string)
else
referrer_uri = referrer_uri.gsub(request.protocol, '').gsub(request.host_with_port, '')
[request_uri, referrer_uri].include?(url_string)
end
end
Прелесть в том, что теперь вы можете просто сделать это (из вашего примера):
<%= link_to_unless(current_page_or_referrer_in(new_task_path), "Add a task") %>
Затем отобразится, если вы находитесь на new_task_path
ИЛИ странице, на которую она была отправлена (например, страница создания