module ActionView::Helpers::UrlHelper

def current_page?(options = nil, check_parameters: false, **options_as_kwargs)


We can also pass in the symbol arguments instead of strings.

# => false
current_page?(controller: 'product', action: 'index')

Let's say we're in the http://www.example.com/products action with method POST in case of invalid product.

# => true
current_page?('http://www.example.com/shop/checkout?order=desc&page=1')

# => true
current_page?('/shop/checkout')

# => false
current_page?('http://www.example.com/shop/checkout', check_parameters: true)

# => true
current_page?('http://www.example.com/shop/checkout')

# => false
current_page?(controller: 'shop', action: 'checkout', order: 'desc', page: '2')

# => true
current_page?(controller: 'shop', action: 'checkout', order: 'desc', page: '1')

# => false
current_page?(controller: 'shop', action: 'checkout', order: 'asc')

# => true
current_page?(controller: 'shop', action: 'checkout')

# => false
current_page?(controller: 'library', action: 'checkout')

# => true
current_page?(action: 'checkout')

# => false
current_page?(action: 'process')

Let's say we're in the http://www.example.com/shop/checkout?order=desc&page=1 action.
==== Examples

True if the current request URI was generated by the given +options+.
def current_page?(options = nil, check_parameters: false, **options_as_kwargs)
  unless request
    raise "You cannot use helpers that need to determine the current " \
          "page unless your view context provides a Request object " \
          "in a #request method"
  end
  return false unless request.get? || request.head?
  options ||= options_as_kwargs
  check_parameters ||= options.is_a?(Hash) && options.delete(:check_parameters)
  url_string = URI::RFC2396_PARSER.unescape(url_for(options)).force_encoding(Encoding::BINARY)
  # 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
  # the behavior can be disabled with check_parameters: true
  request_uri = url_string.index("?") || check_parameters ? request.fullpath : request.path
  request_uri = URI::RFC2396_PARSER.unescape(request_uri).force_encoding(Encoding::BINARY)
  if %r{^\w+://}.match?(url_string)
    request_uri = +"#{request.protocol}#{request.host_with_port}#{request_uri}"
  end
  remove_trailing_slash!(url_string)
  remove_trailing_slash!(request_uri)
  url_string == request_uri
end