Class ActionController::Routing::Optimisation::PositionalArguments
In: vendor/rails/actionpack/lib/action_controller/routing/optimisations.rb
Parent: Optimiser

Given a route

  map.person '/people/:id'

If the user calls person_url(@person), we can simply return a string like "/people/#{@person.to_param}" rather than triggering the expensive logic in url_for.

Methods

Public Instance methods

[Source]

    # File vendor/rails/actionpack/lib/action_controller/routing/optimisations.rb, line 70
70:         def generation_code
71:           elements = []
72:           idx = 0
73: 
74:           if kind == :url
75:             elements << '#{request.protocol}'
76:             elements << '#{request.host_with_port}'
77:           end
78: 
79:           elements << '#{request.relative_url_root if request.relative_url_root}'
80: 
81:           # The last entry in <tt>route.segments</tt> appears to *always* be a
82:           # 'divider segment' for '/' but we have assertions to ensure that
83:           # we don't include the trailing slashes, so skip them.
84:           (route.segments.size == 1 ? route.segments : route.segments[0..-2]).each do |segment|
85:             if segment.is_a?(DynamicSegment)
86:               elements << segment.interpolation_chunk("args[#{idx}].to_param")
87:               idx += 1
88:             else
89:               elements << segment.interpolation_chunk
90:             end
91:           end
92:           %("#{elements * ''}")
93:         end

[Source]

    # File vendor/rails/actionpack/lib/action_controller/routing/optimisations.rb, line 59
59:         def guard_condition
60:           number_of_arguments = route.segment_keys.size
61:           # if they're using foo_url(:id=>2) it's one 
62:           # argument, but we don't want to generate /foos/id2
63:           if number_of_arguments == 1
64:             "(!defined?(default_url_options) || default_url_options.blank?) && defined?(request) && request && args.size == 1 && !args.first.is_a?(Hash)"
65:           else
66:             "(!defined?(default_url_options) || default_url_options.blank?) && defined?(request) && request && args.size == #{number_of_arguments}"
67:           end
68:         end

[Validate]