Method: ActionDispatch::Routing::RouteSet#url_for

Defined in:
actionpack/lib/action_dispatch/routing/route_set.rb

#url_for(options, route_name = nil, url_strategy = UNKNOWN, method_name = nil, reserved = RESERVED_OPTIONS) ⇒ Object

The options argument must be a hash whose keys are symbols.



845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 845

def url_for(options, route_name = nil, url_strategy = UNKNOWN, method_name = nil, reserved = RESERVED_OPTIONS)
  options = default_url_options.merge options

  user = password = nil

  if options[:user] && options[:password]
    user     = options.delete :user
    password = options.delete :password
  end

  recall = options.delete(:_recall) { {} }

  original_script_name = options.delete(:original_script_name)
  script_name = find_script_name options

  if original_script_name
    script_name = original_script_name + script_name
  end

  path_options = options.dup
  reserved.each { |ro| path_options.delete ro }

  route_with_params = generate(route_name, path_options, recall)
  path = route_with_params.path(method_name)

  if options[:trailing_slash] && !options[:format] && !path.end_with?("/")
    path += "/"
  end

  params = route_with_params.params

  if options.key? :params
    if options[:params].respond_to?(:to_hash)
      params.merge! options[:params]
    else
      params[:params] = options[:params]
    end
  end

  options[:path]        = path
  options[:script_name] = script_name
  options[:params]      = params
  options[:user]        = user
  options[:password]    = password

  url_strategy.call options
end